2013-01-06 17 views
10

Stavo frugando attraverso il codice Rails oggi e incappato in this snippet:Cosa fa * :: (due punti asterisco) in Ruby?

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

Cosa significa l'asterisco-double-colon (o splat-double-colon se si vuole) in *::Date fanno?

Presumibilmente ha qualcosa a che fare con lo scopo di una classe Date con un valore particolare ... ma è necessario che l'autore lo includa piuttosto che utilizzare la classe standard Date.

risposta

11

Stavo leggendo il codice sbagliato; non è affatto un operatore "* ::".

Ecco cosa sta succedendo:

  • trovare la classe Date nello scope globale (::Date)
  • chiamata _parse() per ottenere un hash di valori
  • chiamata values_at di trasformare l'hash in un array
  • utilizza l'operatore asterisco nella sua tipica funzione di trasformare una matrice in più argomenti per una chiamata al metodo
  • chiama new_date(), passando gli elementi dell'array per gli argomenti year, mon e mday.

La mancanza di spazio tra gli operatori * e :: l'ha reso confuso. : - \

+3

Il primo punto elenco dovrebbe indicare "nell'ambito ** globale **". L'ambito attuale sarebbe senza '::'. – sepp2k

+0

@ sepp2k Risolto, grazie! –

+5

E questo è un ottimo esempio perché a volte usare le variabili locali è una buona idea. –