Ce este un simbol în Ruby?

Sunt „total nou în lumea Ruby și sunt un pic confuz cu conceptul de simboluri. Care este diferența dintre simboluri și variabile? De ce nu folosiți doar variabile?

Mulțumesc.

Comentarii

  • în Lisp – din care este derivat Ruby – un simbol este în esență tipul de date pentru o variabilă; asta înseamnă că puteți manipula programul într-o manieră de reflecție pe măsură ce se execută. (Nu cea mai coerentă explicație, scuze)

Răspuns

Variabilele și simbolurile sunt lucruri diferite. O variabilă indică diferite tipuri de date. În Ruby, un simbol seamănă mai mult cu un șir decât cu o variabilă.

În Ruby, un șir poate fi modificat, în timp ce un simbol este imuabil. au

x = :my_str y = :my_str 

:my_str va fi creat o singură dată și x și y indică aceeași zonă a memoriei. Pe de altă parte, dacă aveți

x = "my_str" y = "my_str" 

a șirul conține ing my_str va fi creat de două ori și x și y va indica diferite instanțe.

Ca rezultat, simbolurile sunt adesea folosite ca echivalent cu enumerările din Ruby, precum și cheile unui dicționar (hash).

Comentarii

  • Doar pentru a împinge punctul @mipadi ', atunci când comparați un șir trebuie să comparați fiecare caracter unul împotriva celuilalt. Deci, compararea șirurilor identice este O (n). În timp ce simbolurile rubine compară referințele la obiect, vrăjitoarea este O (1).
  • De ce Python nu are acest lucru?
  • Ar trebui să aveți grijă să nu le folosiți în exces, de vreme ce, știam ultima dată, dar ' nu m-am uitat în rubin > 1.9, simboluri don ' t obțineți gc ' d și astfel puteți consuma memorie
  • Se comportă identic în Smalltalk, cu excepția faptului că arată ca #mySymbol .
  • @ frogstarr78 – Cu excepția cazului în care generați simboluri în mod programat (ștergând șiruri fără a le verifica mai întâi), nu ' nu trebuie să vă faceți griji pentru a crea prea multe simboluri.

Răspuns

Simbolul în Ruby este practic același lucru cu simbolul din lumea reală. Este folosit pentru a reprezenta sau a denumi ceva.

Simbolurile sunt foarte frecvent utilizate pentru a reprezenta un fel de stare, de exemplu

order.status = :canceled order.status = :confirmed 

poate privi, de asemenea, simbolul ca enum instant. Nu trebuie să definiți un simbol, îl folosiți doar. Acest articol îl explică în detaliu.

Comentarii

  • Explicații mai bune decât cele mai multe dintre cele ' care par până acum.

Răspuns

De obicei, variabilele tind să fie confundate cu șiruri, dar vă pot înțelege gândind-o ca o variabilă. Este de înțeles. Gândiți-vă astfel:

Statutul unui jucător într-un joc este reprezentat de un număr. 1 înseamnă viu, 2 înseamnă nesigur, 3 înseamnă mort. Acest lucru poate fi ușor înlocuit cu simboluri. Simbolurile ar putea fi :alive :unsure și :dead. Pentru a verifica dacă un jucător este în viață, în loc să facă acest lucru:

if player_status == 1

Puteți face acest lucru:

if player_status == :alive

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *