2013-01-06 19 views
10

byłem wywiercenie poprzez kod Rails dziś i natknął this snippet:Co robi * :: (gwiazdka podwójny dwukropek) w Ruby?

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

Co oznacza gwiazdka-double-colon (lub ikona-double-colon jeśli będzie) w *::Date zrobić?

Można przypuszczać, że ma coś wspólnego z zakresem szczególnie-przestrzeni nazw Date klasie ... ale to wystarczy, konieczne autor umieścić go zamiast po prostu użyć standardowego Date klasę.

Odpowiedz

11

Czytałem kod źle; w ogóle nie jest operatorem "* ::".

Oto co się dzieje:

  • Znajdź klasę Date w zasięgu globalnym (::Date)
  • rozmowy _parse() uzyskać hash wartości
  • połączeń values_at obrócić hash do tablicy
  • użyj operatora gwiazdki w typowej funkcji przekształcania tablicy w wiele argumentów dla wywołania metody
  • wywołanie new_date(), przekazywanie elementów tablicy dla jego argumentów year, mon i mday.

Brak przestrzeni między operatorami * i :: sprawił, że było to mylące. : - \

+3

Pierwszy punkt powinien brzmieć "w zakresie ** globalnym **". Obecny zakres byłby bez '::'. – sepp2k

+0

@ sepp2k Naprawiono, dzięki! –

+5

To doskonały przykład, dlaczego czasami używanie zmiennych lokalnych jest dobrym pomysłem. –