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

jcu*_*nod 5 ruby syntax whitespace

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

render json: {
    "what" => "created", 
    "whatCreated" => "thing",
    "htmlOutput" => render_to_string (partial: "some_partial")
}
Run Code Online (Sandbox Code Playgroud)

但是使用这段代码我不会:

render json: {
    "what" => "created", 
    "whatCreated" => "thing",
    "htmlOutput" => render_to_string(partial: "some_partial")
}
Run Code Online (Sandbox Code Playgroud)

怎么来render_to_string打破我的rails应用程序后的那个空间?

Dim*_*ima 12

问题是,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)文字不是有效的


Ali*_*eza 5

作为一般的 Ruby 风格指南,您不应在参数列表括号前放置空格。这与 rails 无关,而是与 Ruby 语言有关。尝试以下操作来查看:

Array.new(1,2) # => [2]
Array.new (1,2) # = > SyntaxError: unexpected ',', expecting ')'
Array.new(1) # => [nil]
Array.new (1) # => [nil]
Run Code Online (Sandbox Code Playgroud)

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