[ruby-it] DSL vs API => Smalltalk?
Matteo Vaccari
vaccari a pobox.com
Ven 3 Nov 2006 05:14:48 CET
On 11/3/06, Giovanni Corriga <giovanni a corriga.net> wrote:
> Il giorno gio, 02/11/2006 alle 21.29 +0100, Matteo Vaccari ha scritto:
> > On 11/2/06, Giovanni Corriga <giovanni a corriga.net> wrote:
> > Ora che ci penso, il problema di Rename (anything) è che se io ho una
> > classe che ha un metodo pippo, e da un'altra parte c'è un'altra classe
> > che contiene un metodo tipo
> >
> > def foo(x)
> > x.pippo
> > end
> >
> > come faccio a sapere se devo rinominare anche la *chiamata* a pippo
> > dentro foo? E se questa chiamata a "pippo" servisse anche per una
> > terza classe che ha anche lei un metodo "pippo"? Il duck typing mi
> > impedisce di sapere di preciso tutti i posti dove il metodo pippo
> > potrebbe essere usato. :(
>
> Se lavori sul file di testo, sicuro. Ma se lavori sull'AST, tramite type
> inference puoi determinare la classe degli oggetti. E così salvi papera,
> capra e cavoli ;-)
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". 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. 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.
M
> Giovanni
>
>
>
> _______________________________________________
> Ml mailing list
> Ml a lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>
>
>
--
http://matteo.vaccari.name
Maggiori informazioni sulla lista
Ml