Jeg er helt ny i Ruby-verdenen, og jeg er litt forvirret med symbolbegrepet. Hva er forskjellen mellom symboler og variabler? Hvorfor ikke bare bruke variabler?
Takk.
Kommentarer
- i Lisp – som Ruby er avledet av – et symbol er i det vesentlige datatypen for en variabel; det betyr at du kan manipulere programmet på en reflekterende måte når det kjøres. (ikke den mest sammenhengende forklaringen, beklager)
Svar
Variabler og symboler er forskjellige ting. En variabel peker på forskjellige typer data. I Ruby, et symbol er mer som en streng enn en variabel.
I Ruby kan en streng forandres, mens et symbol er uforanderlig. Det betyr at bare en kopi av et symbol trenger å opprettes. Dermed, hvis du har
x = :my_str y = :my_str
:my_str
blir bare opprettet en gang, og x
og y
peker på samme område av minnet. På den annen side, hvis du har
x = "my_str" y = "my_str"
a streng inneholder ing my_str
blir opprettet to ganger , og x
og y
vil peke på forskjellige forekomster.
Som et resultat blir symboler ofte brukt som ekvivalenter til enums i Ruby, samt nøkler til en ordbok (hash).
Kommentarer
Svar
Symbol i Ruby er i utgangspunktet det samme som symbol i den virkelige verden. Det brukes til å representere eller navngi noe.
Symboler brukes veldig ofte til å representere en slags tilstand, for eksempel
order.status = :canceled order.status = :confirmed
Du kan også se på symbol som øyeblikkelig enum. Du trenger ikke definere et symbol, du bruker det bare. Denne artikkelen forklarer det i detalj.
Kommentarer
- Bedre forklaring enn de fleste jeg ' har synes så langt.
Svar
Vanligvis forandres variabler med strenger, men jeg kan forstå at du tenker det som en variabel. Det er forståelig. Tenk på det slik:
Statusen til en spiller i et spill er representert med et tall. 1 betyr levende, 2 betyr usikker, 3 betyr død. Dette kan lett erstattes av symboler. Symbolene kan være :alive
:unsure
og :dead
. For å sjekke om en spiller lever, i stedet for å gjøre dette:
if player_status == 1
Du kan gjøre dette:
if player_status == :alive
#mySymbol
.