Ale*_*xis 10 ruby metaprogramming
最近我遇到了一些奇怪的行为,defined?
用于检查super
关键字是否可以在当前上下文中使用.通常它工作正常,但当我尝试将defined? super
检查与一点点元编程相结合时,它给了我意想不到的结果.
然后展示更容易描述,所以这里有一个举例说明问题:
class A;
def self.def_f!;
singleton_class.send(:define_method, :f) { defined? super }
end
end
class AA < A; end
Run Code Online (Sandbox Code Playgroud)
(A
和AA
类都有.def_f!
类方法)
A.def_f!
A.f # => nil
AA.f # => nil
Run Code Online (Sandbox Code Playgroud)
(A.f
没有超级和AA.f
派遣A.f
,所以一切都好,到目前为止,但......)
AA.def_f! # define its own .f method in the AA class
AA.f # => "super"
A.f # => "super" # WHY???
Run Code Online (Sandbox Code Playgroud)
谁能解释我最后一行?A.f
没有超级方法,为什么它返回"super"
而不是nil
?这是一个错误吗?
(我在1.9.2和1.9.3中尝试过 - 相同的结果)
UPD:我在Ruby bugtracker上开了一张票:http://bugs.ruby-lang.org/issues/6644
归档时间: |
|
查看次数: |
615 次 |
最近记录: |