Sfida a colpi di Facets

Una piccola sfida per i Facets Boys :slight_smile:

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” ? :slight_smile:

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ò :slight_smile:

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]Exegesis 6
[2]http://rubyforge.org/projects/junction/
[3]http://www.fscript.org/documentation/OOPAL.pdf

Chiacchiera con i tuoi amici in tempo reale!
Yahoo Search - Ricerca nel Web | Motore di Ricerca