为什么空格会影响Ruby函数调用?

8
我使用这段代码出现了语法错误。
render json: {
    "what" => "created", 
    "whatCreated" => "thing",
    "htmlOutput" => render_to_string (partial: "some_partial")
}

但是使用这段代码我无法实现:
render json: {
    "what" => "created", 
    "whatCreated" => "thing",
    "htmlOutput" => render_to_string(partial: "some_partial")
}
< p >为什么在render_to_string后面加空格会导致我的Rails应用程序出现问题?< /p >
2个回答

17
事实是,在 Ruby 中,某些方法可以带或不带括号运行。例如,你可以运行 Array.new 1,2,Ruby 可以理解在空格后面的参数,并且你也可以运行 Array.new(1,2),Ruby 知道括号内是参数。
但是,当你运行 Array.new (1,2) 时,Ruby 认为它会接收空格后的参数,但实际上它接收到一个元组 (1,2),基本上与 Array.new((1,2)) 完全相同。
底线是:Array.new (1,2) == Array.new((1,2)),这是一个语法错误,因为 (1,2) 文本不是有效的语法。

好的,你用我的例子解释了潜在的问题,但是为什么要打分我的回答呢? - Alireza
当然,Ruby应该更加智能化,并且不应该假设一个元组是期望的参数(虽然数组是一个稍微不同的问题,但render_to_string呢?(实际上我不知道render_to_string接受什么,但是有很多方法可以接受特定参数)。 - jcuenod
它们并没有不同,它们完全相同,两者都是方法。 - Dima
是的,但是数组可以填充变量,而虚构方法integer_to_string只能接受整数。 - jcuenod

6
作为一般的Ruby风格指南,您不应该在参数列表括号前放置空格。这与Rails无关,而是涉及到Ruby语言本身。请尝试以下内容以了解更多:
Array.new(1,2) # => [2]
Array.new (1,2) # = > SyntaxError: unexpected ',', expecting ')'
Array.new(1) # => [nil]
Array.new (1) # => [nil]

正如您在第二个示例中看到的那样,代码出了问题,解释器期望找到),但找到了,。然而,在最后一个示例中,它没有出错。


谢谢。Doh Ruby不是Rails(修正问题)...你知道为什么吗? - jcuenod
请提供英文原文以进行翻译。 - Alireza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接