比如这段代码
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 引用是可行的吗?