2011-01-11 6 views
32

Während ich Ruby gelernt habe, bin ich gelegentlich auf den Operator "=>" gestoßen. Normalerweise sehe ich es in Form vonIn Ruby was bedeutet "=>" und wie funktioniert es?

:symbol => value 

und es scheint zu häufig verwendet werden, wenn Werte an Funktionen übergeben. Wie heißt genau dieser Operator? Was macht es? Ist es in Ruby integriert oder ist es etwas, das verschiedene Frameworks wie Rails und DataMapper der Symbolklasse hinzufügen? Wird es nur in Verbindung mit der Symbolklasse verwendet? Vielen Dank.

Antwort

39

=> trennt die Schlüssel von den Werten in einem hashmap-Literal. Es ist nicht überladbar und nicht spezifisch mit Symbolen verbunden.

Ein hashmap-Literal hat die Form {key1 => value1, key2 => value2, ...}, aber wenn es als letzter Parameter einer Funktion verwendet wird, können Sie die geschweiften Klammern abbrechen. Wenn Sie also einen Funktionsaufruf wie f(:a => 1, :b => 2) sehen, wird f mit einem Argument aufgerufen, das eine Hashadresse ist, die die Schlüssel :a und :b und die Werte 1 und 2 hat.

+0

Für mehr lesen, siehe die Spitzhacke [Tutorial Abschnitt auf Hashes] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://progz.net/ProgrammingRuby/tut_containers.html%23hashes) und [Referenzabschnitt zu Hashes] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/language.html%23hashes). Beachten Sie, dass in Ruby 1.9 können Sie alternativ ein literales Schlüssel/Wert-Paar in einem Hash wie diesem 'foo: bar' angeben, der den Schlüssel als das Symbol': foo' erzeugt. – Phrogz

+0

Brechen Sie große Probleme in kleinere. Wenn Sie assoziative Arrays und Ruby-Symbole kennenlernen, haben Sie kein Problem, Hashes zu verstehen. – karatedog

+0

So einfach, hier zu klären, ist ein Beispiel von DataMapper Eigenschaft: Titel, String, required => true,: Länge => 5..200 Dies ist die gleiche wie Eigenschaft (Titel, String, {: erforderlich => richtig,: Länge => 5..200}) ? –

11

Sie könnten diesen Operator als "Hash-Rakete" bezeichnen, was bedeutet, dass Sie ihn beim Definieren eines Ruby-Hash verwenden.

Dies ist die Ruby-Hash-Dokumentation, wenn Sie nicht vertraut sind: http://www.ruby-doc.org/core/classes/Hash.html

Beachten Sie, dass in Ruby 1.9, wenn Sie einen Hash sind definiert, die Symbole als Schlüssel, gibt es jetzt eine alternative Syntax für Sie verwendet : http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

+0

+1 für 1.9 Syntax. –

4

Wenn Sie weitere googeln tun wollen, => manchmal einen hashrocket genannt, weil es wie eine Rakete (im gleichen Sinne, dass <=> wie ein Raumschiff schiff~~POS=HEADCOMP aussieht) aussieht, und es in Hashes verwendet wird.

Oder Sie könnten SymbolHound verwenden.

+0

Das ist gut zu wissen. Ich habe auf Google nach Informationen gesucht, bin aber nicht weitergekommen. Danke für den Tipp. –

+0

@DustinMartin Ich bin kürzlich auf eine Suchmaschine namens SymbolHound gestoßen, falls Sie Schwierigkeiten haben, nach einer anderen Syntax zu suchen. –

4

Tipp: Wenn Sie es in einem Hash wie {:a => "A", :b => "B"} verwenden, in Ruby 1.9, können Sie es wie ein JSON-Hash verwenden:

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

ops. bemerkte gerade, dass es oben erwähnt :) – amrnt

0

Neben In Ruby what does "=>" mean and how does it work?:

Sie werden meist siehe =>, um Parameter für eine Funktion zu definieren. Betrachten Sie dies als eine nette Annehmlichkeit: Sie müssen sich nicht an die richtige Reihenfolge Ihrer Parameter erinnern, da alle Parameter in einem riesigen Hash-Wert zusammengefasst sind. Wenn Sie also eine einfache Hilfsmethode haben wie

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

dies ist viel besser als

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

nur weil Sie eine selten verwendete Parameter verwenden möchten. Das Übergeben von Parametern mit einem Hash ist nur eine Konvention in Ruby/Rails, um das Leben einfacher zu machen.