2011-01-11 14 views
32

Podczas nauki Ruby natknąłem się czasami na operatora "=>". Zazwyczaj widzę go w formieW języku Ruby co znaczy "=>" i jak działa?

:symbol => value 

i wydaje być stosowane często przy przejściu wartości do funkcji. Czym dokładnie jest ten operator? Co to znaczy/oznacza? Czy jest on wbudowany w Ruby, czy jest to coś, co różne struktury, takie jak Rails i DataMapper, dodają do klasy symboli? Czy jest używany tylko w połączeniu z klasą symboli? Dzięki.

Odpowiedz

39

oddziela klawisze od wartości w literomie skrótów. Nie jest przeciążony i nie jest specjalnie połączony z symbolami.

Literał hashmapu ma postać {key1 => value1, key2 => value2, ...}, ale gdy jest używany jako ostatni parametr funkcji, można pominąć nawiasy klamrowe. Tak więc, gdy widzisz wywołanie funkcji, takie jak f(:a => 1, :b => 2), f jest wywoływane z jednym argumentem, który jest hashmap, który ma klucze :a i :b i wartości 1 i .

+0

Więcej informacji można znaleźć w kilofie [sekcja samouczka na temat skrótów] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/tut_containers.html%23hashes) i [część referencyjna o hashe] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/language.html%23hashes). Zauważ, że w Ruby 1.9 Alternatywnie możesz podać literalną parę klucz/wartość w mieszaniu, tak jak to 'foo: bar', które tworzy klucz jako Symbol': foo'. – Phrogz

+0

Przerwij duże problemy na mniejsze. Jeśli poznasz tablice asocjacyjne i symbole ruby, nie będziesz miał problemu z rozumieniem hashe. – karatedog

+0

Więc po prostu do wyjaśnienia, tutaj jest przykład z DataMapper nieruchomości: tytuł, String: wymagana => true,: długość => 5..200 To jest taka sama jak nieruchomość (tytuł, String, {: required => true,: length => 5..200}) ? –

11

Możesz usłyszeć, że operator ten nazywany jest "hashową rakietą", co oznacza, że ​​używasz go podczas definiowania mieszania ruby.

Jest to dokumentacja Ruby Hash, jeśli nie jesteś zaznajomiony: http://www.ruby-doc.org/core/classes/Hash.html

Należy zauważyć, że w Ruby 1.9, jeśli zdefiniowanie skrótu, który używa symboli jako kluczy, jest teraz dostępny alternatywny składnia do ciebie : http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

+0

+1 dla składni 1.9. –

4

Jeśli chcesz robić żadnych dalszych googlowanie, => jest czasami nazywane hashrocket, ponieważ wygląda jak rakieta (w tym samym sensie, że <=> wygląda jak statek kosmiczny) i jest używany w mieszań.

Lub możesz użyć SymbolHound.

+0

Dobrze o tym wiedzieć. Szukałem trochę informacji o Google, ale nie udało mi się. Dzięki za wskazówkę. –

+0

@DustinMartin Niedawno natknąłem się na wyszukiwarkę o nazwie SymbolHound, na wypadek, gdybyś miał trudności z wyszukiwaniem innej składni. –

4

Wskazówka: jeśli używasz go w hash jak {:a => "A", :b => "B"} w Ruby 1.9, można go używać jak hash JSON:

{ 
    a: "A", 
    b: "B" 
} 
+0

ops. właśnie zauważyłem, że wspomniano powyżej :) – amrnt

0

Oprócz In Ruby what does "=>" mean and how does it work?:

można będzie głównie patrz =>, aby zdefiniować parametry funkcji. Pomyśl o tym jako o miłej wygodzie: nie musisz pamiętać właściwej kolejności parametrów, ponieważ wszystkie parametry są zawijane w gigantyczny skrót. Więc jeśli masz prostą metodę pomocnika jak

link_to "My link", my_path, :confirm => "Are you sure?"

to jest lepsze niż

link_to "My link", my_path, null, null, null, null, "Are you sure?"

tylko dlatego, że chcesz używać rzadko używany parametr. Przesyłanie parametrów za pomocą skrótu jest po prostu konwencją w Ruby/Rails, aby ułatwić życie.