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

我在这段代码中遇到语法错误

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应用程序?

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

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

所以底线:

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

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

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

正如你在第二个例子中看到的那样,代码坏了,解释器期望找到a )但是找到了, 。 但是在最后一个例子中它没有破坏。