Una piccola sfida per i Facets Boys 
Ho fatto alcune classettine che mi permettono di fare un pò di magia su
codice ruby… vi sfido (benevolmente) a rifarlo in facets e poi,
eventualmente ad arricchire. può essere un buon modo di scavare e portare
alla luce le funzionalità più esotiche.
Qui sotto c’è un piccolo esempio che da me gira con le mie classi, ma che
ha
bisogno di alcune funzioni di supporto di facets per funzionare da voi.
L’esempio è tipico, devo sostituire al volo delle Mucche con delle Mucche
meccaniche, per non mettere a rischio gli originali amici quadrupedi.
class Cow
def make_noise
“MOO!”
end
end
class MechanicalCow
def make_noise
“m_o_o!”
end
end
def a_bunch_of_cows
[Cow.new, Cow.new, Cow.new, Cow.new]
end
#queste sono mucche vere
puts a_bunch_of_cows.all.make_noise
substituting Cow => MechanicalCow do
#queste sono mucche cyborg
puts a_bunch_of_cows.all.make_noise
end
Disclaimer: nessun animale è stato maltrattato nella stesura o esecuzione
di
questo codice
–
Chiaroscuro
Liquid Development: http://liquiddevelopment.blogspot.com/
Approfitto del gancio di chiaroscuro:
— chiaro scuro [email protected] ha scritto:
> L'esempio è tipico, devo sostituire al volo delle
> Mucche con delle Mucche
> meccaniche, per non mettere a rischio gli originali
> amici quadrupedi.
sagace, cos’è questo il “Cyborg Shield pattern” ? 
end
puts a_bunch_of_cows.all.make_noise
end
mh… un subsitutin non mi pare ci sia, anche se non mi
sento di escluderlo. E’ bellissimno però 
In compenso posso agganciarmi per parlare di
facets/more/elementor, che è una classettina carina
che multiplexa i metodi ad un array, per cui potresti
fare
def a_bunch_o_cows
Elementor.new([Cow.new,Cow.new,Cow.new])
end
a_bunch_of_cows.make_noise.
e supponendo che passi da una mucca all’altra con un
to_mech, verrebbe fuori una cosa coem questa:
class Cow
def noise
“MOO”
end
def to_mech
MechCow.new
end
end
=> nil
class MechCow
def noise
“m_o_o”
end
end
=> nil
Elementor.new([Cow.new, Cow.new])
=> #<Elementor:0x2bdd220 @mode=nil,
@array=[#Cow:0x2bdd280, #Cow:0x2bdd268]>
e=_
=> #<Elementor:0x2bdd220 @mode=nil,
@array=[#Cow:0x2bdd280, #Cow:0x2bdd268]>
e.to_mech
=> #<Elementor:0x2bd7640 @mode=nil,
@array=[#MechCow:0x2bd75c8, #<MechCow:0x2b
d7568>]>
e
=> #<Elementor:0x2bdd220 @mode=nil,
@array=[#Cow:0x2bdd280, #Cow:0x2bdd268]>
puts e.to_mech.noise
m_o_o
m_o_o
=> nil
Lo ammetto, mi piacciono troppo queste cose da quando
ho scoperto le Junction in perl6[1] (c’è un port per
ruby imperfetto ma bellissimo[2]) e gli “higher order
messages” in F-Script[3]
[1]http://www.perl.com/pub/a/2003/07/29/exegesis6.html?page=4
[2]http://rubyforge.org/projects/junction/
[3]http://www.fscript.org/documentation/OOPAL.pdf
Chiacchiera con i tuoi amici in tempo reale!
http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com