6

下面的所有值让我用语法b调用一个方法。*args

def some_method(a)
   puts a
end

b = 1
some_method(*b) # => 1

b = false
some_method(*b) # => false

b = "whatever"
some_method(*b) # => "whatever"

有了nil,我希望得到nil,而不是参数错误:

b = nil
some_method(*b) # => ArgumentError: wrong number of arguments (0 for 1)

这里发生了什么?

4

1 回答 1

7

如果对象不是数组并且在其上定义,则splat 运算符*首先应用于对象。对于数字、假类和字符串,没有定义,它们仍然是它们自己。对于 nilclass,定义并返回一个空数组。当它们被喷溅时,数字、假类和字符串仍然是它们自己,但空数组变得没有任何东西。另请参阅此问题的答案。to_ato_ato_ato_a

于 2014-06-02T02:50:55.753 回答