Iniettare metodi statici


#1

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


#2

— Paolo Donà 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


Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive
http://it.messenger.yahoo.com


#3

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 wrote:

=> nil


Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive
http://it.messenger.yahoo.com


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


#4

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”. :wink:


blog: http://blog.hyperstruct.net
sw: http://dev.hyperstruct.net, http://repo.hyperstruct.net