Rails 3中的字符串连接

val*_*alk 7 ruby string ruby-on-rails concatenation

我想知道为什么会这样:如果加号和下一个字符串之间有空格,Ruby会连接两个字符串.但如果没有空间,它是否适用于一些一元运算符?

params['controller'].to_s + '/'
# => "posts/"

params['controller'].to_s +'/'
# => NoMethodError: undefined method `+@' for "/":String
Run Code Online (Sandbox Code Playgroud)

Mat*_*ver 9

解析器将解释+'/'to_s方法调用的第一个参数.它将这两个陈述视为等同:

> params['controller'].to_s +'/'
# NoMethodError: undefined method `+@' for "/":String

> params['controller'].to_s(+'/')
# NoMethodError: undefined method `+@' for "/":String
Run Code Online (Sandbox Code Playgroud)

如果在to_s方法调用结束时明确包含括号,则问题就会消失:

> params['controller'].to_s() +'/'
=> "posts/"
Run Code Online (Sandbox Code Playgroud)


One*_*ude 6

如果你想连接一个字符串,最安全的方法是编写"#{params[:controller].to_s} /"ruby的字符串转义在许多情况下更安全更好