# Domanda sui simboli

**URL:** <https://www.ruby-forum.com/t/domanda-sui-simboli/97200>\
**Category:** IT\
**Created:** [July 5, 2006, 4:30pm UTC](https://www.ruby-forum.com/t/domanda-sui-simboli/97200 "2006-07-05T16:30:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![michelangelo\_giacom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c4cdca/32.png) [@michelangelo\_giacom](https://www.ruby-forum.com/u/michelangelo_giacom)\
**Post date:** [July 5, 2006, 4:30pm UTC](https://www.ruby-forum.com/t/domanda-sui-simboli/97200/1 "2006-07-05T16:30:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![michelangelo\_giacom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c4cdca/32.png) [@michelangelo\_giacom](https://www.ruby-forum.com/u/michelangelo_giacom)\
**Post date:** [July 5, 2006, 4:33pm UTC](https://www.ruby-forum.com/t/domanda-sui-simboli/97200/2 "2006-07-05T16:33:50Z")

</div>

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 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

## – Chiaroscuro

Liquid Development: [http://liquiddevelopment.blogspot.com/](http://liquiddevelopment.blogspot.com/)

---

<div class="post-metadata">

**Author:** ![michelangelo\_giacom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c4cdca/32.png) [@michelangelo\_giacom](https://www.ruby-forum.com/u/michelangelo_giacom)\
**Post date:** [July 5, 2006, 6:21pm UTC](https://www.ruby-forum.com/t/domanda-sui-simboli/97200/3 "2006-07-05T18:21:36Z")

</div>

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
