我想知道为何如此:如果在加号和下一个字符串之间有空格,Ruby会连接两个字符串。但是如果没有空间,它是否适用于一元运算符?Rails 3中的字符串串联3
params['controller'].to_s + '/'
# => "posts/"
params['controller'].to_s +'/'
# => NoMethodError: undefined method `[email protected]' for "/":String
我想知道为何如此:如果在加号和下一个字符串之间有空格,Ruby会连接两个字符串。但是如果没有空间,它是否适用于一元运算符?Rails 3中的字符串串联3
params['controller'].to_s + '/'
# => "posts/"
params['controller'].to_s +'/'
# => NoMethodError: undefined method `[email protected]' for "/":String
的解析器解释+'/'
作为第一个参数to_s
方法调用更安全和更好。据处理这两个语句等效:
> params['controller'].to_s +'/'
# NoMethodError: undefined method `[email protected]' for "/":String
> params['controller'].to_s(+'/')
# NoMethodError: undefined method `[email protected]' for "/":String
如果你明确地包括在to_s
方法的末尾括号调用问题消失:
> params['controller'].to_s() +'/'
=> "posts/"
否**未定义方法'+ @'为“/”:String **不适用于您的解释。 – 2013-04-07 15:36:55
如果你想连接字符串,最安全的方式就是写"#{params[:controller].to_s} /"
Ruby的字符串转义是在许多情况下
'safer'是踢球可能重复! – Jerome 2015-01-04 16:48:34
仔细查看错误:
p "hi".to_s +'/'
p "hi".to_s -'2'
#=> in `<main>': undefined method `[email protected]' for "/":String (NoMethodError)
这是因为unary operator
+
,-
等仅定义为Numeric
类对象。
p "hi".to_s +2
#=>in `to_s': wrong number of arguments (1 for 0) (ArgumentError)
现在上面的错误是完全正确的to_s
:如果你看一下下面的代码很清楚。由于to_s
在调用时没有任何参数。
正确的版本是:
p "hi".to_s + '2' #=> "hi2"
的[字符串连接错误](http://stackoverflow.com/questions/5861693/string-concatenation-error) – valk 2013-04-07 15:27:16