将nil
传递给构造函数时,Ruby中的效果如下:
s = String(nil)
或
a = Array(nil)
这是否意味着s
或a
nil
或s
或a
是未填充的类型对象String
或输入Array
?
答案 0 :(得分:7)
String(arg)
在to_s
上调用arg
并返回结果。 nil.to_s
返回一个新的空字符串。因此String(nil)
返回一个新的空字符串。
Array(arg)
尝试在to_ary
上调用to_a
然后调用arg
,返回存在的第一个方法的结果(如果两个方法都不存在,则返回[arg]
)。 NilClass
没有to_ary
方法,但nil.to_a
会返回一个新的空数组。因此Array(nil)
返回一个新的空数组。
请注意,String(arg)
和Array(arg)
不是构造函数。它们只是Kernel
中定义的全局方法。要在Ruby中构造对象,通常在类上调用new
,例如Array.new(2)
创建一个长度为2的数组。