我想知道爲何如此:如果在加號和下一個字符串之間有空格,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