Il giorno ven, 03/11/2006 alle 05.14 +0100, Matteo V. ha scritto:
No, quello che voglio dire è che se tu da qualche parte hai una
chiamata x.pippo, non potrai mai sapere di che classe sia l’oggetto x
a runtime. Siccome a “x” non è associato nessun tipo (è una
variabile) potrebbe essere istanziata di volta in volta con un’oggetto
di qualsiasi tipo, purché risponda al messaggio “pippo”.
Beh, puoi applicare alcuni trucchi, tipo andare a vedere quali sono i
sender di #foo e vedere se in quel contesto si riesce a determinare
quale sia il tipo che avrà x. Perch+ se hai almeno una chiamata del tipo
bar.foo(Disney.new)
o che possa essere ricondotta ad una chiamata di questo tipo, allora sai
che x.pippo dovrà diventare x.pluto . Ma questo è (relativamente) facile
in un sistema ad immagine tipo Smalltalk, meno in un sistema come Ruby.
E non cambia
lavorare sull’albero sintattico o sul file di testo. E allora se io
dico che voglio rinominare il metodo Foobar#pippo in Foobar#pluto,
dovrò andare a esaminare tutte le chiamate a pippo in tutto il
programma.
Questo non mi è chiaro. Non dovresti farlo in ogni caso?
E poi devo vedere se ci sono altre classi che implementano
un metodo “pippo” e chiedermi se anche in quelle classi “pippo” va
rinominato.Non c’è che dire, Rename Method in Ruby è un bel casino da implementare.
Sul fatto che sia meno semplice da implementare rispetto a linguaggi a
tipizzazione statica manifesta, siamo d’accordo.
Giovanni