为什么用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>
我希望这可行,但返回一个空字符串。
这是正确的行为吗?
答案 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')