2013-08-13 14 views
7

Jaka jest różnica między dodaniem i przedrostkiem dwukropka w rubinie?Różnica między zakończeniem i dopełnieniem dwukropka (: pozycja a przedmiot :)

przykład:

#In rails you often have things like this: 
has_many :models, dependent: :destroy 

Dlaczego dependent: mieć dołączony okrężnicy, ale :models i :destroy mają dołączany Colon Jaka jest różnica?

+0

możliwy duplikat [Czy istnieje jakaś różnica między \ ": klucz =>" wartość "\" i \ "klucz:" wartość "\" hash notacje?] (Http://stackoverflow.com/questions/8675206/is-there-any-difference-between-the-key-value-and-key-value-hash-no) –

Odpowiedz

9

jest to nowy składnia Ruby 1,9 do określania symboli, które są kluczowe w mieszania.

Zarówno dołączone i dołączone : określają, ale te ostatnie są ważne tylko podczas inicjowania skrótu.

Możesz myśleć o symbol jako stałej stałej łańcuchowej.

jest równoważne

:dependent => :destroy 

Przed 1,9 skróty zostały zdefiniowane w składni, który jest nieco bardziej rozwlekły i niewygodne typ:

hash = { 
    :key => "value", 
    :another_key => 4 
} 

one uproszczony go 1,9:

hash = { 
    key: "value", 
    another_key: 4 
} 

Jeśli kiedykolwiek piszesz moduł, którego chcesz używać na Ruby przed 1.9, upewnij się, że ty e starsza składnia.

4

W obu przypadkach dwukropek wskazuje symbol, ale dołączenie go jest skrótem, gdy symbol jest kluczem w haszdzie.

dependent: :destroy 

jest taka sama jak

:dependent => :destroy 
2

"Dołączony" dwukropek jest po prostu nowym powszechnym sposobem wyświetlania skrótów w wersji 1.9.

dependent: :destroy to samo, co :dependent => :destroy

Z drugiej strony, „poprzedzany” dwukropek wskazuje typ danych symbolu w Ruby.

5

Od Ruby pozwala pominąć nawias () aw niektórych przypadkach kręcone szelki {} może nie być oczywiste, ale powyższy kod faktycznie wygląda tak:

has_many(:models, { dependent: :destroy })

Teraz, oznacza to, że has_many przyjmuje dwa argumenty, z których jeden to symbol :, niezmienny ciąg znaków, a także skrót, gdzie kluczem jest dependent, a wartość to destroy; również może być postrzegany jako :dependent => destroy.