# Iniettare metodi statici

**URL:** <https://www.ruby-forum.com/t/iniettare-metodi-statici/93624>\
**Category:** IT\
**Created:** [April 5, 2006, 9:23am UTC](https://www.ruby-forum.com/t/iniettare-metodi-statici/93624 "2006-04-05T09:23:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Paolo\_DonSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/898d66/32.png) [@Paolo\_DonSSSS](https://www.ruby-forum.com/u/Paolo_DonSSSS)\
**Post date:** [April 5, 2006, 9:23am UTC](https://www.ruby-forum.com/t/iniettare-metodi-statici/93624/1 "2006-04-05T09:23:27Z")

</div>

Ciao a tutti,  
vi pongo un questito un pò newbie ma io non sono riuscito a venirne a capo.  
Ho bisogno di iniettare dei metodi statici in alcuni oggetti, ma non so  
come  
fare.

Di solito uso i Moduli per iniettare funzionalità condivise, in questo  
modo:

class AAA  
include CCC  
end

class BBB  
include CCC  
end

Module CCC  
def metodo\_per\_a\_e\_c  
p ‘chiamato metodo\_per\_a\_e\_c!’  
end  
end

a = AAA.new  
b = BBB.new

a.metodo\_per\_a\_e\_c #=\> ‘chiamato metodo\_per\_a\_e\_c!’  
b.metodo\_per\_a\_e\_c #=\> ‘chiamato metodo\_per\_a\_e\_c!’

Ma io vorrei che fosse possibile chiamare ‘metodo\_per\_a\_e\_c’ senza fare  
il  
new degli oggetti, tipo:

AAA.a.metodo\_per\_a\_e\_c e BBB.metodo\_per\_a\_e\_c

Avete idea di come fare? Ho spulciato il pickaxe ma non sono riuscito a  
trovare la risposta al mio dubbio…

–  
Paolo Donà  
email me: paolo[dot]dona[at]gmail[dot]com  
skype me: paolo[dot]dona

---

<div class="post-metadata">

**Author:** ![Paolo\_DonSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/898d66/32.png) [@Paolo\_DonSSSS](https://www.ruby-forum.com/u/Paolo_DonSSSS)\
**Post date:** [April 5, 2006, 9:32am UTC](https://www.ruby-forum.com/t/iniettare-metodi-statici/93624/2 "2006-04-05T09:32:34Z")

</div>

— Paolo Donà [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> Ciao a tutti,  
> vi pongo un questito un pò newbie ma io non sono  
> riuscito a venirne a capo.  
> Ho bisogno di iniettare dei metodi statici in alcuni  
> oggetti, ma non so come  
> fare.

piccola pedanteria inutile: in realtà sono metodi di  
classe, la differenza (al 99% inutile) è nel fatto che  
un metodo statico non ha un “self”.

Ad ogni modo, credo che ciò che cerchi sia “extend”

> > C=Class.new  
> > =\> C  
> > module M  
> > def ciao() “ciao” end  
> > end  
> > =\> nil  
> > C.extend M  
> > =\> C  
> > C.ciao  
> > =\> “ciao”

–  
icq: #69488917  
blog: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)

* * *

Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive

> **[Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos](https://www.yahoo.com/)**
>
> Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!

---

<div class="post-metadata">

**Author:** ![Paolo\_DonSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/898d66/32.png) [@Paolo\_DonSSSS](https://www.ruby-forum.com/u/Paolo_DonSSSS)\
**Post date:** [April 5, 2006, 9:47am UTC](https://www.ruby-forum.com/t/iniettare-metodi-statici/93624/3 "2006-04-05T09:47:52Z")

</div>

ok, quindi (per completezza) il mio esempio diventa:

Module CCC  
def metodo\_per\_a\_e\_c  
p ‘chiamato metodo\_per\_a\_e\_c!’  
end  
end

class AAA  
extend CCC  
end

class BBB  
extend CCC  
end

AAA.metodo\_per\_a\_e\_c  
BBB.metodo\_per\_a\_e\_c

Ti ringrazio. Paolo

On 4/5/06, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> =\> nil
> 
> * * *
> 
> Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive  
> [http://it.messenger.yahoo.com](http://it.messenger.yahoo.com)

–  
Paolo Donà  
email me: paolo[dot]dona[at]gmail[dot]com  
skype me: paolo[dot]dona

---

<div class="post-metadata">

**Author:** ![Paolo\_DonSSSS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/898d66/32.png) [@Paolo\_DonSSSS](https://www.ruby-forum.com/u/Paolo_DonSSSS)\
**Post date:** [April 5, 2006, 10:21am UTC](https://www.ruby-forum.com/t/iniettare-metodi-statici/93624/4 "2006-04-05T10:21:52Z")

</div>

> piccola pedanteria inutile: in realtà sono metodi di  
> classe, la differenza (al 99% inutile) è nel fatto che  
> un metodo statico non ha un “self”.

Piccola metapedanteria metainutile:

class Test  
def Test.foo  
p self  
end  
end

Test.foo #=\> “Test”

Ma capisco che non vuoi portare i neofiti in lande pericolose senza il  
sufficiente grado di “illuminazione”. 😉

–  
blog: [http://blog.hyperstruct.net](http://blog.hyperstruct.net)  
sw: [http://dev.hyperstruct.net](http://dev.hyperstruct.net), [http://repo.hyperstruct.net](http://repo.hyperstruct.net)
