it-swarm.it

Cos'è un simbolo in Ruby?

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

Grazie.

49
wassimans

Le variabili e i 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 una sola copia di un simbolo. Quindi, se hai

x = :my_str
y = :my_str

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

x = "my_str"
y = "my_str"

una stringa contenente my_str verrà creato due volte e x e y indicheranno diverse istanze.

Di conseguenza, i simboli sono spesso usati come l'equivalente degli enum in Ruby, così come le chiavi di un dizionario (hash).

74
mipadi

Symbol in Ruby è fondamentalmente 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 in dettaglio.

18
Jakub Arnold

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

Lo stato di un giocatore in una partita è rappresentato da un numero. 1 significa vivo, 2 significa incerto, 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 farlo:

if player_status == :alive

1
sirsnow