Ho il sospetto che stai cercando define_singleton_method
:
define_singleton_method (simbolo, metodo) → NEW_METHOD
define_singleton_method (simbolo) {} blocco → proc
Definisce un Singleton metodo nel ricevitore. Il parametro metodo può essere un Proc
, un Method
o un oggetto UnboundMethod
. Se viene specificato un blocco, viene utilizzato come corpo del metodo.
Se si utilizza define_method
su self.class
, si creerà il nuovo metodo come metodo di istanza su tutta la classe in modo che sarà disponibile come un metodo su tutte le istanze della classe.
usereste define_singleton_method
come questo:
class C
def initialize(s)
define_singleton_method(s) { puts "some method #{s}" }
end
end
E poi:
a = C.new('a')
b = C.new('b')
a.a # puts 'some method a'
a.b # NoMethodError
b.a # NoMethodError
b.b # puts 'some method b'
Se il initialize
fatto:
self.class.send(:define_method,n) { puts "some method #{n}" }
allora si otterrebbe:
a.a # puts 'some method a'
a.b # puts 'some method b'
b.a # puts 'some method a'
b.b # puts 'some method b'
e probabilmente non è quello che stai cercando. Creare una nuova istanza e avere come conseguenza l'intera modifica della classe è piuttosto strano.
fonte
2013-10-14 20:39:09
Che cosa stai cercando di fare? –
Niente di specifico, cercando di vedere come posso definire dinamicamente un metodo usando 'define_method' – Bala