Olen täysin uusi Ruby-maailmassa, ja olen hieman sekoittunut symbolien käsitteeseen. Mitä eroa on symboleilla ja muuttujilla? Miksi et vain käyttäisi muuttujia?
Kiitos.
Kommentit
- Lispissä – mistä Ruby on johdettu – symboli on pohjimmiltaan muuttujan tietotyyppi; se tarkoittaa, että voit manipuloida ohjelmaa Reflection-tyyliin sen suorituksen aikana (ei yhtenäisin selitys, anteeksi)
vastaus
Muuttujat ja symbolit ovat erilaisia asioita. Muuttuja viittaa erityyppisiin tietoihin. Ruby-ohjelmassa symboli on enemmän kuin merkkijono kuin muuttuja.
Ruby-merkkijono on muutettavissa, kun taas symboli on muuttumaton. Tämä tarkoittaa, että vain yksi symbolin kopio on luotava. Jos siis on
x = :my_str y = :my_str
:my_str
luodaan vain kerran, ja x
ja y
osoittavat samalle muistialueelle. Toisaalta, jos sinulla on
x = "my_str" y = "my_str"
a merkkijono sisältää ing my_str
luodaan kahdesti ja x
ja y
viittaa erilaisiin instansseihin.
Tämän seurauksena symboleja käytetään usein vastaavina Rubyn enumien kanssa sekä avainsanoja sanakirjaan (hajautus).
Kommentit
- Vain @mipadi ' -pisteen työntämiseksi, kun vertaat merkkijonoa, sinun on verrattava jokaista merkkiä toisiinsa. Joten identtisten merkkijonojen vertaaminen on O (n). Rubiinisymbolit vertaavat objektiviittauksia, ja noita on O (1).
- Miksi Pythonilla ei ole tätä?
- Sinun tulisi olla varovainen, ettet myöskään käytä niitä liikaa, koska viimeksi tiesin, mutta en ole ' tarkastellut tätä ruby > 1.9, symbolit don ' t hae gc ' d ja voivat siten syödä muistia
- He käyttäytyvät identtisesti Smalltalkissa, paitsi että ne näyttävät
#mySymbol
. - @ frogstarr78 – Ellet luo järjestelmällisesti symboleja (internoita merkkijonoja tarkistamatta niitä ensin), sinun <
ei tarvitse huolehtia liian monien symbolien tekemisestä.
Vastaus
Ruby-symboli on pohjimmiltaan sama asia kuin symboli todellisessa maailmassa. Sitä käytetään kuvaamaan tai nimeämään jotain.
Symboleja käytetään hyvin yleisesti edustamaan jonkinlaista tilaa, esimerkiksi
order.status = :canceled order.status = :confirmed
Sinä voi myös tarkastella symbolia välittömänä enumina. Sinun ei tarvitse määrittää symbolia, vaan käytä sitä vain. Tässä artikkelissa selitetään se hyvin yksityiskohtaisesti.
Kommentit
- Parempi selitys kuin useimmat minusta ' näyttävät toistaiseksi.
Vastaa
Muuttujat yleensä sekoitetaan merkkijonoihin, mutta ymmärrän, että ajattelet sitä muuttujana. Se on ymmärrettävää. Ajattele sitä tällä tavalla:
Pelin pelaajan tilaa edustaa numero. 1 tarkoittaa elävää, 2 tarkoittaa epävarmaa, 3 tarkoittaa kuollutta. Tämä voidaan helposti korvata symboleilla. Symbolit voivat olla :alive
:unsure
ja :dead
. Voit tarkistaa, onko pelaaja elossa, sen sijaan, että teet tämän:
if player_status == 1
Voit tehdä tämän:
if player_status == :alive