用nil初始化的Ruby字符串会导致异常

时间:2013-07-22 15:38:50

标签: ruby string constructor

为什么用nil初始化的Ruby String会导致此异常?

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>

我希望这可行,但返回一个空字符串。

这是正确的行为吗?

2 个答案:

答案 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参数”是不同的。

答案 1 :(得分:0)

虽然您通常不使用.new实例化字符串,但如果这样做,则需要实际的字符串。

例如:

String.new('hello')