Mikä on Rubyn symboli?

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *