# Sfida a colpi di Facets

**URL:** <https://www.ruby-forum.com/t/sfida-a-colpi-di-facets/99765>\
**Category:** IT\
**Created:** [July 25, 2006, 12:15pm UTC](https://www.ruby-forum.com/t/sfida-a-colpi-di-facets/99765 "2006-07-25T12:15:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![chiaroscuro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c5a1d2/32.png) [@chiaroscuro](https://www.ruby-forum.com/u/chiaroscuro)\
**Post date:** [July 25, 2006, 12:15pm UTC](https://www.ruby-forum.com/t/sfida-a-colpi-di-facets/99765/1 "2006-07-25T12:15:24Z")

</div>

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/](http://liquiddevelopment.blogspot.com/)

---

<div class="post-metadata">

**Author:** ![chiaroscuro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c5a1d2/32.png) [@chiaroscuro](https://www.ruby-forum.com/u/chiaroscuro)\
**Post date:** [July 29, 2006, 11:13pm UTC](https://www.ruby-forum.com/t/sfida-a-colpi-di-facets/99765/2 "2006-07-29T23:13:48Z")

</div>

Approfitto del gancio di chiaroscuro:

— chiaro scuro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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][Exegesis 6](http://www.perl.com/pub/a/2003/07/29/exegesis6.html?page=4)  
[2][http://rubyforge.org/projects/junction/](http://rubyforge.org/projects/junction/)  
[3][http://www.fscript.org/documentation/OOPAL.pdf](http://www.fscript.org/documentation/OOPAL.pdf)

Chiacchiera con i tuoi amici in tempo reale!  
[Yahoo Search - Ricerca nel Web | Motore di Ricerca](http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com)
