2014-09-14 21 views
5

Che cos'è ::?Che cosa significa: nella sintassi Ruby?

@song ||= ::TwelveDaysSong.new 
+0

Sapevo di namespace, ma non avevo visto :: usato senza prefisso. Immagino che fosse quello che mi ha confuso. Capisco ora che si riferisce al namespace Object di livello root – archie

risposta

7

Rubino :: (punto e virgola doppie)

costanti di primo livello si fa riferimento con un doppio due punti

class TwelveDaysSong 
end 

a = TwelveDaysSong.new 
#I could wrote it like this too 
a = ::TwelveDaysSong.new 

module Twelve 
    class TwelveDaysSongs 
    end 
end 

b = Twelve::TwelveDaysSong.new 
#b is not equal to 
a = ::TwelveDaysSong.new 
#neither 
a = TwelveDaysSong.new 

classi sono costanti troppo quindi se avete una costante

HELLOWOLRD = 'hw' 

puoi chiamarlo così ::HELLOWORLD

0

ritorno @song

Se @song è falso (per esempio non esiste)
creare una nuova istanza dell'oggetto ::TwelveDaysSong come @song

1

Questo è un metodo di si inizializza la variabile di istanza @song.

Se @song è già impostato (per alcuni valori di verità, ovvero, non nil o false), l'espressione valuta solo quel valore.

Se, tuttavia, @song non è già impostato su tale valore, crea una nuova istanza della classe TwelveDaysSong e lo assegna a @song. Quindi, come in precedenza, l'espressione restituisce il valore di @song, ma tale valore è ora un riferimento all'oggetto TwelveDaysSong appena creato.

L'uso di :: nel nome della classe indica che si tratta di una classe assoluta di primo livello; utilizzerà la classe di livello superiore anche se esiste anche una classe TwelveDaysSong definita in qualunque sia il modulo corrente.

Problemi correlati