Forum: Italian Ruby user group Iniettare metodi statici

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Paolo Donà (Guest)
on 2006-04-05 11:23
(Received via mailing list)
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
gabriele renzi (Guest)
on 2006-04-05 11:32
(Received via mailing list)
--- 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
Paolo Donà (Guest)
on 2006-04-05 11:47
(Received via mailing list)
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
Massimiliano M. (Guest)
on 2006-04-05 12:21
(Received via mailing list)
> 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
sw: http://dev.hyperstruct.net, http://repo.hyperstruct.net
This topic is locked and can not be replied to.