gpt4 book ai didi

ruby - Object#public_methods 没有按预期工作

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:41 25 4
gpt4 key购买 nike

我创建了一个新模块:

module M
def self.g
end
end

我想列出 M 中定义的所有(类)方法。当然,M.public_methods 也会列出 Object 中的方法,所以我尝试了:

M.public_methods(false)

但是当我在 irb 中尝试这个时,它仍然列出了一些额外的方法:

M.public_methods(false)
# => [:g, :freeze, :===, :==, :<=>, :<, :<=, :>, :>=, :to_s, :inspect, :included_modules, …]

我可以得到我想要的结果

M.public_methods(false) - Object.public_methods

这让我很惊讶。 false 参数不应该已经摆脱了所有 Object 方法吗?

最佳答案

Shouldn't the false parameter already get rid of all the Object methods?

Object#public_methods 文档的措辞当然可以改进。 的意思是当all参数是 false ,它只返回单例类和接收者类的实例方法,但不返回任何父类(super class)。因此,在您的情况下,返回的方法是来自 M 的方法。的单例类 ( g ) 加上 Module 的所有公共(public)实例方法.

您可以通过比较 M.public_methods(false) 的输出来验证这一点和 Module.public_instance_methods(false) :

M.public_methods(false) - Module.public_instance_methods(false)
# => [:g]

M.public_methods(false) & Module.public_instance_methods(false) ==
Module.public_instance_methods(false)
# => true

Object#singleton_methods 会给你想要的答案:

M.singleton_methods(false)
# => [:g]

关于ruby - Object#public_methods 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252605/

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