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

时间:2014-10-21 07:09:25

标签: ruby syntax whitespace

我的代码

出现语法错误
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")
}

render_to_string打破我的rails应用程序后,该空格怎么来?

2 个答案:

答案 0 :(得分:9)

事实上,ruby中的方法可以使用或不使用括号来运行。 例如,您可以运行Array.new 1,2并且ruby知道它在空格后接收参数。你也可以运行Array.new(1,2)并且ruby知道args在括号内。

但是,当你运行Array.new (1,2)时,ruby认为它将在空格后接收参数,但实际上它会收到一个元组(1,2),并且基本上它与Array.new((1,2))

所以底线:

Array.new (1,2) == Array.new((1,2))这就是语法错误,因为(1, 2)字面值不是有效的

答案 1 :(得分:3)

作为一般的Ruby样式指南,您不应在参数列表括号前添加空格。这与rails无关,而是Ruby语言。尝试以下内容:

Array.new(1,2) # => [2]
Array.new (1,2) # = > SyntaxError: unexpected ',', expecting ')'
Array.new(1) # => [nil]
Array.new (1) # => [nil]

正如您在第二个示例中看到的那样,代码中断了,解释器希望找到)但找到,。然而,在最后一个例子中它没有破坏。