2013-07-22 33 views
0

爲什麼初始化爲nil的Ruby字符串導致此異常?用nil初始化的Ruby字符串導致異常

irb(main):001:0> String.new(nil) 
TypeError: no implicit conversion of nil into String 
     from (irb):1:in `initialize' 
     from (irb):1:in `new' 
     from (irb):1 
     from /Users/jord/.rbenv/versions/2.0.0-p0/bin/irb:12:in `<main>' 
irb(main):002:0> 

我希望這個工作,但返回一個空字符串。

這是正確的行爲?

回答

5

String.new需要作爲一個參數新字符串的內容應該是什麼。 nil不能是字符串的內容。如果你想以這種方式得到一個空字符串,你需要做String.new("")nil不是""

或者,也許你期望它返回空字符串,因爲String.new(沒有參數)。如果是這種情況,那麼你會混淆「缺乏論點」和「nil論點」。他們是不同的。事實上,假設你定義一個方法foo

def foo *args 
    args 
end 

如果調用foo不帶任何參數,然後args方法調用內將[],而如果你調用foo(nil),然後args[nil]

foo  # => [] 
foo(nil) # => [nil] 

這告訴我們「沒有參數」和「nil參數」是不同的。

+0

好的解釋! –

+0

謝謝,你的解釋很好,我只是沒有想到。 – jordelver

0

雖然你通常不使用.new實例化字符串,但如果你這樣做,它需要一個實際的字符串。

例如:

String.new('hello')