13

我今天在浏览 Rails 代码时偶然发现了这个片段

new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday))

星号双冒号(或 splat-双冒号,如果你愿意的话)有*::Date什么作用?

大概它与特别命名空间Date类的范围有关......但作者有必要包含它而不是仅仅使用标准Date类。

4

1 回答 1

14

我读错了代码;它根本不是“*::”运算符。

这是正在发生的事情:

  • Date在全局范围内查找类 ( ::Date)
  • 调用_parse()以获取值的哈希值
  • 调用values_at将散列转换为数组
  • 在将数组转换为方法调用的多个参数的典型功能中使用星号运算符
  • call new_date(),将数组元素传递给它的yearmonmday参数。

*和运算符之间缺乏空间::使其令人困惑。:-\

于 2013-01-06T23:37:24.950 回答