2013-04-07 123 views
7

我想知道为何如此:如果在加号和下一个字符串之间有空格,Ruby会连接两个字符串。但是如果没有空间,它是否适用于一元运算符?Rails 3中的字符串串联3

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

params['controller'].to_s +'/' 
# => NoMethodError: undefined method `[email protected]' for "/":String 
+0

的[字符串连接错误](http://stackoverflow.com/questions/5861693/string-concatenation-error) – valk 2013-04-07 15:27:16

回答

9

的解析器解释+'/'作为第一个参数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/" 
+0

否**未定义方法'+ @'为“/”:String **不适用于您的解释。 – 2013-04-07 15:36:55

6

如果你想连接字符串,最安全的方式就是写"#{params[:controller].to_s} /" Ruby的字符串转义是在许多情况下

+0

'safer'是踢球可能重复! – Jerome 2015-01-04 16:48:34

4

仔细查看错误:

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"