* ::(星号双冒号)在Ruby中做什么?

时间:2013-01-06 23:27:40

标签: ruby syntax scope splat

我今天在探索Rails代码并偶然发现了this snippet

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

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

据推测,它与特定命名空间的Date类的范围有关......但是作者必须包含它而不是仅仅使用标准的Date类。< / p>

1 个答案:

答案 0 :(得分:13)

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

以下是发生的事情:

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

*::运营商之间缺乏空间让人感到困惑。 : - \