Che cos'è un simbolo in Ruby?

38

Sono totalmente nuovo nel mondo di Ruby, e sono un po 'confuso con il concetto di Simboli. Qual è la differenza tra simboli e variabili? Perché non usare solo variabili?

Grazie.

    
posta wassimans 07.12.2010 - 19:36
fonte

3 risposte

62

Variabili e simboli sono cose diverse. Una variabile punta a diversi tipi di dati. In Ruby, un simbolo è più simile a una stringa che a una variabile.

In Ruby, una stringa è mutabile, mentre un simbolo è immutabile. Ciò significa che è necessario creare solo una copia di un simbolo. Quindi, se hai

x = :my_str
y = :my_str

:my_str verrà creato una sola volta e x e y puntano alla stessa area di memoria. D'altra parte, se hai

x = "my_str"
y = "my_str"

una stringa contenente my_str verrà creata due volte e x e y punteranno a istanze diverse.

Di conseguenza, i simboli vengono spesso utilizzati come equivalenti alle enumerazioni in Ruby, così come le chiavi per un dizionario (hash).

    
risposta data 07.12.2010 - 19:47
fonte
15

Il simbolo in Ruby è praticamente la stessa cosa del simbolo nel mondo reale. È usato per rappresentare o nominare qualcosa.

I simboli sono molto comunemente usati per rappresentare un qualche tipo di stato, per esempio

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

Puoi anche guardare il simbolo come enum istantaneo. Non è necessario definire un simbolo, basta usarlo. Questo articolo lo spiega dettagliatamente.

    
risposta data 08.12.2010 - 05:05
fonte
0

Di solito, le variabili tendono a essere confuse con le stringhe, ma posso capire che la pensi come una variabile. È comprensibile. Pensaci in questo modo:

Lo stato di un giocatore in una partita è rappresentato da un numero. 1 significa vivo, 2 significa insicuro, 3 significa morto. Questo può essere facilmente sostituito da simboli. I simboli potrebbero essere :alive :unsure e :dead . Per verificare se un giocatore è vivo, invece di farlo:

if player_status == 1

Potresti fare questo:

if player_status == :alive

    
risposta data 17.07.2017 - 18:22
fonte

Leggi altre domande sui tag