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
Paolo