Ancora sui simboli

grazie per la tempestiva risposta, diciamo che avevo capito come usare i
simboli come degli enum rinforzati, ma non mi è ancora chiaro l’utilizzo
“come nomi di metodi per chiamate dinamiche” ne come mai il seguente
codice:
cane = cane
:cane
puts cane
puts :cane
stampi cane, cane come se trasformasse il simbolo nella stringa
corrispondente, credo di aver compreso blocchi, sintassi etc, ma questa
storia dei simboli non la digerisco bene, ciao a tutti

se passato a puts il simbolo si trasforma in stringa.
è come se il tuo enum forzato non fosse esattamente RED = 3 ma RED = “RED”
solo che se dici RED = “RED”, allora tanto vale dire :red che fai prima
:slight_smile:

poi come spiegava paolo, tutti i vari :red che trovi in giro fanno
riferimento a un’unica locazione di memoria.

per le chiamate dinamiche considera che:

puts “hallo”

e

puts “hallo”.to_s

e

puts (“hallo”.send :to_s)

fanno la stessa cosa, in modo sempre più ‘profondo’ e vicino al vero
funzionamento del sistema.

a questo punto puoi fare anche

method = :to_s
puts (“hallo”.send method)

e in pratica controlli dinamicamente quale metodo viene invocato sulla
strinaga ‘hallo’ senza una valanga di if che devono decidere quale
metodo
chiamare in base a quale enum viene passata.

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

corrispondente, credo di aver compreso blocchi, sintassi etc, ma questa
storia dei simboli non la digerisco bene, ciao a tutti


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


Chiaroscuro

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