下面 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)
这里发生了什么?
最佳答案
splat 运算符 *
首先将 to_a
应用于对象,如果它不是数组并且在其上定义了 to_a
。对于数字、falseclass 和字符串,to_a
没有定义,它们仍然是它们自己。对于 nilclass,定义了 to_a
并返回一个空数组。当它们被展开时,数字、假类和字符串本身仍然存在,但空数组变得什么都没有。另请参阅 this question 的答案.
关于ruby - 将 splat 传递给 nil 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23985520/