Domanda sui simboli

salve a tutti, è qualche settimana che sono dietro a questo linguaggio ma
ancora mi sfugge cosa sono i simboli e quando è conveniente usarli, grazie
a
tutti ciao

hai presente quando in altri linguaggi usi dei flag a cui assegni dei
numerelli?

tipo RED = 3

ecco, in ruby non hai bisogno di assegnare i numerelli e usi
direttamente
:red

poi ruby li usa per rappresentare anche nomi di metodi per chiamate
dinamiche.

tipo: “hallo”.send :to_s

On 7/5/06, michelangelo giacomelli [email protected] wrote:

salve a tutti, è qualche settimana che sono dietro a questo linguaggio ma
ancora mi sfugge cosa sono i simboli e quando è conveniente usarli, grazie
a
tutti ciao


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

Spiegazione da 30 secondi…
Se sei pratico di Java un simbolo è una come una stringa di cui sia stato
fatto l’intern(), ovvero un singleton di una stringa.
In ruby, essendo le stringhe modificabili, ogni literal stringa occupa
memoria a sè, mentre in Java la VM cerca di fare delle ottimizzazioni
automatiche.

es, il codice:

call_my_method “blabla” => true
call_my_method “blabla” => true
call_my_method “blabla” => true

genera in memoria 3 oggetti String che poi vengono passati come
parametri a
call_my_method.
Siccome molte volte le stringhe vengono usate solo per dare una label a
dei
parametri (come chiavi di Hash) o in generale per dare nomi a qualcosa,
si deduce che c’è un’occupazione di memoria non necessaria. Nel caso
precedente bastava infatti una stringa “blabla” in memoria da utilizzare
3
volte.

Visto che queste stinghe non devono essere utilizzate come oggetti
stringa
veri e propri, si utilizzano al loro posto i simboli che possono essere
facilmente convertiti da e verso una stringa ma non ne hanno tutte le
caratteristiche. In particolare un simbolo contiene solo il “nome”
contenuto nella stringa.

se fai:

call_my_method :blabla => true
call_my_method :blabla => true
call_my_method :blabla => true

in memoria ti trovi un solo oggetto Symbol che contiene in qualche forma
“blabla”, ma sostanzialmente hai risparmiato memoria rispetto alla
versione
precedente…

nun zo se sono stato spiegato :smiley:

Paolo