0

为什么初始化的 Ruby 字符串nil会导致此异常?

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>

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

这是正确的行为吗?

4

2 回答 2

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论据”是不同的。

于 2013-07-22T15:45:08.963 回答
0

尽管您通常不使用 .new 实例化字符串,但如果这样做,它需要一个实际的字符串。

例如:

String.new('hello')
于 2013-07-22T15:45:04.627 回答