ruby - 将 splat 传递给 nil 作为参数

标签 ruby arguments null splat

下面 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/

相关文章:

c++ - 尖括号与圆括号中的非类型名称参数

c++ - 我可以从以前的参数中设置默认参数吗?

sql - 如果没有找到记录则返回一个值

ruby-on-rails - 如何自动运行 Ruby 脚本?

ruby - 如何使用元编程来减少此 Ruby 代码中的冗余?

ruby - 检查给我\\但只放\

node.js - 将参数传递给 package.json 中的 npm 脚本

java - Android:WAITING对象出现

mysql - 从结果集中删除 NULL

ruby - 如何在 Ruby 中创建 "class cluster"(带有具体子类实例的工厂类)?