我怀疑您正在寻找define_singleton_method
:
define_singleton_method(symbol, method) → new_method
define_singleton_method(symbol) { block } → proc
在接收器中定义一个单例方法。方法参数可以是 a 、Proc
aMethod
或UnboundMethod
对象。如果指定了块,则将其用作方法体。
如果您使用define_method
on self.class
,您将创建新方法作为整个类的实例方法,因此它将作为该类的所有实例的方法可用。
你会这样使用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'
这可能不是你要找的。创建一个新实例并导致整个类发生变化是相当奇怪的。