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

Cra*_*ker 13 ruby syntax scope splat

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

new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday))
Run Code Online (Sandbox Code Playgroud)

什么是星号 - 双结肠(如果你愿意的话,还是splat-le-colon)*::Date呢?

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

Cra*_*ker 14

我读错了代码; 它根本不是"*::"操作符.

这是发生了什么:

  • Date在全局范围内查找类(::Date)
  • 调用_parse()以获取值的哈希值
  • 调用values_at将哈希值转换为数组
  • 使用星号运算符的典型功能是将数组转换为方法调用的多个参数
  • 呼叫new_date(),传入其阵列元件year,mon和mday参数.

*和::运营商之间缺乏空间使其令人困惑.: - \

  • 这是一个很好的例子,为什么有时使用局部变量是一个好主意. (6认同)
  • 第一个要点应该是"在**全球**范围内".当前范围没有`::`. (3认同)