2013-04-07 90 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"