Sana define_singleton_method
aradığınız şüpheli:
define_singleton_method (sembol, yöntemi) → NEW_METHOD
define_singleton_method (sembol) {blok} proc
→ a tek tanımlar alıcıda yöntem. yöntemi parametresi Proc
, Method
veya UnboundMethod
nesnesi olabilir. Bir blok belirtilirse, yöntem gövdesi olarak kullanılır. Eğer self.class
üzerinde define_method
kullanırsan, sınıfın tüm örneklerini bir yöntem olarak kullanıma sunulması için
, tüm sınıfın üzerinde örnek yöntemi olarak yeni bir yöntem oluşturacağız.
Böyle define_singleton_method
kullanmak:
class C
def initialize(s)
define_singleton_method(s) { puts "some method #{s}" }
end
end
Ve sonra:
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'
Eğer senin initialize
yaptı:
sonra
self.class.send(:define_method,n) { puts "some method #{n}" }
olsun istiyorum:
a.a # puts 'some method a'
a.b # puts 'some method b'
b.a # puts 'some method a'
b.b # puts 'some method b'
ve muhtemelen aradığınız şey bu değil. Yeni bir örnek oluşturmak ve sonuç olarak tüm sınıf değişiminin olması oldukça tuhaftır.
Ne yapmaya çalışıyorsunuz? –
Hiçbir şey, 'define_method' – Bala