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