2013-07-22 30 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')