比如这段代码
class Person
def hello
yield
end
def world(&proc)
proc.call
end
end
p = Person.new
p.hello {puts self.class}
p.world {puts self.class}
p.instance_eval {puts self.class}
输出:
Object
Object
Person
如果我想写一个叫做haha
方法,然后通过的调用 p.haha {puts self.class}
输出 Person
,如果不借助 instance_eval
(包括不借助那些已经借助了instance_eval
的方法:Module#define_method
等),可以写出这个 haha
方法吗?说到底就是像 instance_eval
那样修改一个 Block 里的 self 引用是可行的吗?