我希望将单例方法添加到特定对象。我希望当第一次调用对象上的实例方法时,它会做一些工作,然后为所述同名对象(包含工作)创建一个单例方法。在对所述对象的所有后续调用中,单例方法将隐藏实例方法并被调用。
我知道如何创建单例方法,我的问题是我希望创建单例方法来调用 lambda(l
在本例中)。def 不创建闭包,因此在随后调用该方法时我无法引用变量 l (下面的代码)(l.call()
在此示例中已注释掉)我想知道在特定对象上创建单例方法时如何创建闭包. 任何帮助,将不胜感激。谢谢你。
class Thing
end
t = Thing.new
t2 = Thing.new
Thing.instance_eval() do
def speak
puts "I speak for all Things, I am a class method"
end
end
Thing.class_eval() do
def speak
puts "This is the instance method referenced by the Thing object #{self}"
r = "something I wish to hold on to, maybe expensive to calculate"
l = lambda {puts r}
instance_eval() do
def speak()
puts "This is the singleton method in the Thing object #{self}"
#l.call() # I want this to work! How?
end
end
end
end
Thing.speak()
t.speak()
t2.speak()
t.speak()
t2.speak()
运行时给出以下结果:(我将 '<' 更改为 '#' 所以它们显示在 html 中)
我为万物说话,我是一个类方法
这是 Thing 对象引用的实例方法#Thing:0x1d204>
这是 Thing 对象引用的实例方法#Thing:0x1d1dc>
这是 Thing 对象中的单例方法 #Thing:0x1d204>
这是 Thing 对象中的单例方法 #Thing:0x1d1dc>