gpt4 book ai didi

ruby - defined?(super) 检查的奇怪行为

转载 作者:数据小太阳 更新时间:2023-10-29 06:47:04 26 4
gpt4 key购买 nike

最近我发现 defined? 运算符有一些奇怪的行为,用于检查 super 关键字是否可以在当前上下文中使用。通常它工作正常,但是当我尝试组合定义的 时? super 用一点元编程检查,它给了我意想不到的结果。

显示比描述更容易,所以这里是一个提炼的例子来说明问题:

class A; 
def self.def_f!;
singleton_class.send(:define_method, :f) { defined? super }
end
end
class AA < A; end

(AAA 类都有.def_f! 类方法)

A.def_f!

A.f # => nil
AA.f # => nil

(A.f 没有 super 和 AA.f 调度到 A.f,所以到目前为止一切正常,但是...)

AA.def_f! # define its own .f method in the AA class

AA.f # => "super"
A.f # => "super" # WHY???

谁能解释一下最后一行? A.f 没有super 方法,那为什么它返回"super" 而不是nil?这是一个错误吗?

(我在 1.9.2 和 1.9.3 中都试过了——结果一样)

UPD:我在 Ruby bugtracker 上开了一张票:http://bugs.ruby-lang.org/issues/6644

最佳答案

好的,@Niklas 是对的,我向 Ruby bugtracker 报告了这个问题,他们确认并修复了错误:https://bugs.ruby-lang.org/issues/6644 .

据我所知,修复将包含在 ruby​​ 2.0.0 中。

关于ruby - defined?(super) 检查的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com