Ruby Languagesimboli


Sintassi

  • :simbolo
  • :'simbolo'
  • :"simbolo"
  • .to_sym "simbolo"
  • % s {simbolo}

Osservazioni

Vantaggi dell'uso di simboli su stringhe:

1. Un simbolo Ruby è un oggetto con confronto O (1)

Per confrontare due stringhe, è potenzialmente necessario esaminare ogni carattere. Per due stringhe di lunghezza N, ciò richiederà N + 1 confronti

def string_compare str1, str2
  if str1.length != str2.length
        return false
  end
  for i in 0...str1.length
    return false if str1[i] != str2[i]
  end
  return true
end
string_compare "foobar", "foobar"

Ma poiché ogni aspetto di: foobar si riferisce allo stesso oggetto, possiamo confrontare i simboli osservando gli ID oggetto. Possiamo farlo con un solo confronto. (O (1))

def symbol_compare sym1, sym2
  sym1.object_id == sym2.object_id
end
symbol_compare :foobar, :foobar

2. Un simbolo Ruby è un'etichetta in un'enumerazione in formato libero

In C ++, possiamo usare "enumerazioni" per rappresentare famiglie di costanti correlate:

enum BugStatus { OPEN, CLOSED };
BugStatus original_status = OPEN;
BugStatus current_status  = CLOSED;

Ma poiché Ruby è un linguaggio dinamico, non ci preoccupiamo di dichiarare un tipo di BugStatus o di tenere traccia dei valori legali. Invece, rappresentiamo i valori di enumerazione come simboli:

original_status = :open
current_status  = :closed

3. Un simbolo di Ruby è un nome costante e univoco

In Ruby, possiamo cambiare il contenuto di una stringa:

"foobar"[0] = ?b # "boo"

Ma non possiamo cambiare il contenuto di un simbolo:

:foobar[0]  = ?b # Raises an error

4. Un simbolo di Ruby è la parola chiave per un argomento di parole chiave

Quando si passano gli argomenti delle parole chiave a una funzione Ruby, si specificano le parole chiave usando i simboli:

# Build a URL for 'bug' using Rails.
url_for :controller => 'bug',
        :action => 'show',
        :id => bug.id

5. Un simbolo rubino è una scelta eccellente per un tasto cancelletto

In genere, utilizzeremo i simboli per rappresentare le chiavi di una tabella hash:

options = {}
options[:auto_save]     = true
options[:show_comments] = false

simboli Esempi correlati