module Bar
def abc
define_method(:test){p "test"}
end
end
class Foo
extend Bar
abc
end
Foo.new.test
这段代码运行正常
module Bar
def abc
self.define_method(:test){p "test"} #private method called
end
end
class Foo
extend Bar
abc
end
Foo.new.test
这段代码会报 private method called
我自己 p 了一下 self 的值,为 Foo 所以我做了一个推论,运行正常的代码中调用的是 Bar 模块的 define_method,但是这样的话新增的 test 方法应该是加到 Bar 上,Foo 并没有 include Bar,为什么却能够拥有 Bar 的实例方法呢? 还有 Bar 的 abc 已经被 extend 到了 Foo 之中,为什么调用 Foo 的私有方法还是会报错呢?
望解答