我懷疑你正在尋找define_singleton_method
:
define_singleton_method(符號,法)→NEW_METHOD
define_singleton_method(符號){}塊PROC→
定義一個單方法在接收器中。 方法參數可以是Proc
,Method
或UnboundMethod
對象。如果指定了塊,則將其用作方法主體。
如果您在使用self.class
define_method
,您將創建新的方法,對整個類的實例方法,因此將作爲在類的所有實例的方法。
你會使用define_singleton_method
這樣的:
class C
def initialize(s)
define_singleton_method(s) { puts "some method #{s}" }
end
end
然後:
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'
如果您initialize
那樣:
self.class.send(:define_method,n) { puts "some method #{n}" }
,那麼你會得到:
a.a # puts 'some method a'
a.b # puts 'some method b'
b.a # puts 'some method a'
b.b # puts 'some method b'
這可能不是你要找的。創建一個新的實例並讓整個班級變化的結果很奇怪。
你想做什麼? –
沒有具體的,試圖看看我可以使用'define_method'動態定義一個方法。 – Bala