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 solo variabili?

Grazie.

Commenti

  • in Lisp – da cui deriva Ruby – un simbolo è essenzialmente il tipo di dati per una variabile; ciò significa che puoi manipolare il programma in modo da riflesso mentre viene eseguito (non la spiegazione più coerente, scusa)

Risposta

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 deve essere creata solo una copia di un simbolo. Quindi, se tu have

x = :my_str y = :my_str 

:my_str verrà creato solo una volta e x e y puntano alla stessa area di memoria. Daltra parte, se hai

x = "my_str" y = "my_str" 

a stringa contiene my_str verrà creato due volte e x e y punterà a istanze diverse.

Di conseguenza, i simboli sono spesso usati come equivalenti alle enumerazioni in Ruby, così come le chiavi di un dizionario (hash).

Commenti

  • Solo per spingere il punto di @mipadi ', quando confronti una stringa devi confrontare ogni carattere luno con laltro. Quindi, il confronto di stringhe identiche è O (n). Mentre i simboli rubino confrontano i riferimenti agli oggetti, la strega è O (1).
  • Perché Python non ha questo?
  • Dovresti stare attento a non abusarne anche, poiché, lultima volta che lo sapevo, ma non ho ' esaminato questo aspetto in ruby > 1.9, simboli don ' t get gc ' d e così possono consumare memoria
  • Si comportano in modo identico in Smalltalk, tranne che sembrano #mySymbol .
  • @ frogstarr78 – A meno che tu non stia generando programmaticamente simboli (internando stringhe senza prima controllarle), non ' devi preoccuparti di creare troppi simboli.

Risposta

Il simbolo 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, ad esempio

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

Tu può anche considerare il simbolo come enumerazione istantanea. Non è necessario definire un simbolo, basta usarlo. Questo articolo lo spiega in dettaglio.

Commenti

  • Spiegazione migliore della maggior parte dei ' che mi sembra finora.

Risposta

Di solito, le variabili tendono a essere confuse con le stringhe, ma posso capire che la pensi come una variabile. È comprensibile. Pensala 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 farlo:

if player_status == :alive

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *