在Ruby中,"*::"(星号双冒号)是什么作用?

14

今天我在研究Rails代码时偶然发现了这段代码

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

*::Date 中的星号双冒号(或称为splat-double-colon)有什么作用?

很可能与特定命名空间下的Date类的作用域有关...但它足够必要,以至于作者包含它而不仅仅使用标准的Date类。

1个回答

15

我读错了代码,它根本不是 "*::" 运算符。

这里是正在发生的事情:

  • 在全局范围内查找 Date 类 (::Date)
  • 调用 _parse() 获取值的哈希表
  • 调用 values_at 把哈希表转换成数组
  • 使用星号运算符将数组转换为方法调用的多个参数
  • 调用 new_date(),传入数组元素作为其 yearmonmday 参数。

星号运算符和双冒号运算符之间缺少空格让它变得令人困惑。 :-\


3
第一个要点应该说“在全局范围内”。当前的作用域将没有 :: - sepp2k
6
这正是为什么有时候使用局部变量是个好主意的绝佳例子。 - Dominik Honnef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接