gpt4 book ai didi

ruby - 为什么 const_missing 不在其前面加上 Object 就不能工作?

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:57 25 4
gpt4 key购买 nike

看起来const_missingObject 的实例方法。如果是这样,为什么这段代码不起作用?

module Extensions
def const_missing(c)
puts c
end
end

class Object
include Extensions
end

NonExistent.new

为了使其正常运行,我必须将 def const_missing 更改为 def Object.const_missing。为什么?

最佳答案

这只是 Ruby 中方法调用解析方式的结果。

首先,检查单例方法。然后是类的实例方法,然后是祖先(将是包含的模块,然后是父类(super class)及其包含的模块)。

因此您可以直接定义 Object.const_missing,或者将您的 Module 包含在 Object 的单例类中:

class << Object
include Extensions
end

NonExistent # => prints "NonExistent"

你也可以 monkeypatch Module#const_missing

关于ruby - 为什么 const_missing 不在其前面加上 Object 就不能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084628/

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