Si

Simboli in Ruby

1 esercizio

Informazioni su Simboli

I simboli sono identificatori con nome che possono essere usati per fare riferimento a un valore. I simboli si creano tramite un letterale di simbolo, che consiste nel prefissare un nome con il carattere :, ad esempio :foo. Possono anche essere scritti tra virgolette, ad esempio :"foo", il che permette, per esempio, di avere spazi nel nome.

:foo # => :foo
:"foo boo" # => :"foo boo"

I simboli sono usati in molti punti del linguaggio, ad esempio come chiavi negli hash, per rappresentare nomi di metodi e nomi di variabili.

Identificatore

Ciò che distingue i simboli dalle stringhe è che sono identificatori e non rappresentano dati o testo. Questo significa che due simboli con lo stesso nome sono sempre lo stesso oggetto.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

Modificare i simboli

I simboli sono immutabili, il che significa che non possono essere modificati. Questo significa che quando «modifichi» un simbolo, in realtà ne stai creando uno nuovo. Esistono alcuni metodi che possono essere usati per manipolare i simboli; restituiscono tutti nuovi simboli. Tutti i metodi si possono trovare nella Symbol API.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

Il vantaggio dell'immutabilità dei simboli è che sono più efficienti in termini di memoria rispetto alle stringhe, ma anche più sicuri da usare come identificatori.

Conversione

I simboli possono essere convertiti in stringhe e viceversa. Questo può essere utile quando vuoi modificare un simbolo, o quando vuoi usare un simbolo come stringa. Per presentare una stringa come simbolo, puoi usare il metodo String#to_sym; per fare l'opposto, puoi usare il metodo Symbol#to_s. Dato che i simboli hanno un insieme limitato di metodi, può essere utile convertire un simbolo in una stringa per usare su di esso i metodi delle stringhe, se serve un nuovo simbolo.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

Ottenere nomi negli scope

In Ruby puoi ottenere nomi negli scope usando vari metodi per ottenere i nomi di costanti, metodi e variabili. Questi metodi restituiscono array di simboli.

Alcuni metodi sono Module#constants, Module#instance_methods, Module#class_variables, global_variables e local_variables.

module Foo
  BAR = 1
  def self.baz; end
end

a = 1

Foo.constants # => [:BAR]
Foo.instance_methods # => [:baz]

local_variables # => [:a]

Tutti i metodi si possono trovare nella Kernel API e nella Module API.

Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Simboli