2013-01-06 62 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

這是一個很好的例子,爲什麼有時候,使用局部變量是一個好主意。 –

相關問題