În Ruby, ce înseamnă „=>” și cum funcționează? [duplicat] (Programare, Ruby Pe Șine, Ruby, Operatori, Simboluri, Hashrocket)

Dustin Martin a intrebat.

În timp ce învățam Ruby, am întâlnit ocazional operatorul „=>”. De obicei îl văd sub forma

:symbol => value

și este pare să fie folosit frecvent atunci când se transmit valori către funcții. Cum se numește mai exact acest operator? Ce face/semnificație are? Este încorporat în Ruby sau este ceva ce diferite framework-uri precum Rails și DataMapper adaugă la clasa simbol? Este utilizat numai în combinație cu clasa simbol? Vă mulțumim.

5 răspunsuri
sepp2k

=> separă cheile de valori într-un literal hashmap. Nu este supraîncărcabilă și nu este legată în mod specific de simboluri.

Un literal hashmap are forma {key1 => value1, key2 => value2, ...}, , dar atunci când este utilizat ca ultim parametru al unei funcții, puteți omite parantezele curbe. Astfel, atunci când vedeți un apel de funcție de tipul f(:a => 1, :b => 2), , f este apelată cu un singur argument, care este un hashmap care are cheile :a și :b și valorile 1 și 2.

Comentarii

  • Pentru mai multe informații, consultați Pickaxe despre Hașuri și secțiunea de referință privind hașele. Rețineți că în Ruby 1.9 puteți specifica alternativ o pereche cheie/valoare literală într-o Hash, astfel foo: bar, , care creează cheia sub forma simbolului :foo. –  > Por Phrogz.
  • Împărțiți problemele mari în altele mai mici. Dacă ajungi să cunoști array-urile asociative și Simbolurile ruby, nu vei avea nicio problemă în a înțelege Hashes. –  > Por karatedog.
  • Deci, doar pentru a clarifica, iată un exemplu din DataMapper property :title, String, :required => true, :length => 5..200 Este același lucru cu property(:title, String, {:required => true, :length => 5..200}) ? –  > Por Dustin Martin.
  • Dar putem folosi și acest lucru => cu rescue … De exemplu begin ... rescue SignalException, Interrupt, SystemExit => e...end –  > Por S.Goswami.
jmcnevin

S-ar putea să auziți acest operator denumit „hash rocket”, ceea ce înseamnă că îl folosiți atunci când definiți un hash ruby.

Aceasta este documentația Ruby Hash, dacă nu sunteți familiarizat: http://www.ruby-doc.org/core/classes/Hash.html

Rețineți că, în Ruby 1.9, dacă definiți un hash care utilizează simboluri ca chei, aveți la dispoziție o sintaxă alternativă: http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

amrnt

Sfat: dacă o utilizați într-un hash de tipul {:a => "A", :b => "B"}, , în Ruby 1.9, îl puteți utiliza ca pe un hash JSON:

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

Andrew Grimm

Dacă vreți să mai căutați pe Google, => se numește uneori hashrocket, pentru că arată ca o rachetă (în același sens în care <=> seamănă cu o navă spațială), și este folosită în hașuri.

Sau ați putea folosi SymbolHound.

Comentarii

  • Este bine de știut. Am căutat destul de mult pe Google pentru informații despre el, dar nu am ajuns nicăieri. Mulțumesc pentru pont. –  > Por Dustin Martin.
  • @DustinMartin Am dat recent peste un motor de căutare numit SymbolHound, în cazul în care aveți dificultăți în căutarea altor sintaxe. –  > Por Andrew Grimm.
d135-1r43

În plus față de În Ruby ce înseamnă „=>” și cum funcționează?:

De cele mai multe ori veți vedea => pentru a defini parametri pentru o funcție. Gândiți-vă la acest lucru ca la o comoditate plăcută: Nu trebuie să vă amintiți ordinea corectă a parametrilor, deoarece toți parametrii sunt înglobați într-un hash uriaș. Astfel, dacă aveți o metodă de ajutor simplă precum

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

aceasta este mult mai bună decât

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

doar pentru că doriți să folosiți un parametru rar utilizat. Deci, trecerea parametrilor cu un hash este doar o convenție în Ruby/Rails pentru a face viața mai ușoară.

Comentarii

  • De asemenea, este greșit, deoarece ar trebui să folosiți doar link_to "My link", my_path, confirm: "Are you sure?" –  > Por Tim Kretschmer.