2013-01-06 30 views
10

我是通过Rails代码今天戳和偶然this snippet*:(星号双冒号)在Ruby中做什么?

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

是什么在*::Date星号,双冒号(或图示双冒号如果你愿意)吗?

大概它与特殊命名空间类Date的范围有关......但它足以让作者包含它,而不仅仅是使用标准的Date类。

回答

11

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

这里发生的事情:

  • 找到Date类在全球范围内(::Date
  • 呼叫_parse()获得价值
  • 呼叫values_at的哈希把散列到一个数组
  • 在其将数组转换为多个参数的方法调用的典型函数中使用星号运算符
  • 调用new_date(),将数组元素传入其参数year,monmday

*::运营商之间的空间不足导致混乱。 : - \

+3

第一个要点应该是“在**全局**范围内”。当前的作用域将不包含'::'。 – sepp2k

+0

@ sepp2k修好了,谢谢! –

+5

这是一个很好的例子,为什么有时候,使用局部变量是一个好主意。 –

相关问题