gpt4 book ai didi

ruby - 为什么 Object.instance_methods(false) 在 Ruby 中不返回预期的方法?

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

当我执行 Object.instance_methods(true) 时,我得到了 http://ruby-doc.org/core-2.5.0/Object.html 上列出的所有实例方法(加上 大多数 BasicObject 中定义的实例方法;我不太确定为什么我没有获得 BasicObject 的所有实例方法,但这是另一个问题)。然而,当我执行 Object.instance_methods(false) 时,我只得到

[:__binding__, :pry, :to_yaml]

我希望它返回我之前获得的所有方法,减去 BasicObject 方法。我错过了什么?

最佳答案

大多数方法都没有在对象本身上定义,它们是在内核(一个包含在对象中的模块)上定义的。你可以看到这个:

Object.instance_methods(true).map(&method(:method)).map(&:owner)

=> [Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, #>, Kernel, Kernel, Kernel, #>, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, Kernel, BasicObject, BasicObject, BasicObject, BasicObject, BasicObject, BasicObject, BasicObject, BasicObject]

如果我打开一个新的 irb 窗口并运行

Object.instance_methods(true).select { |sym| method(sym).owner == Object }

我没有得到任何结果。但是如果我需要“ pry ”,那么我只会得到 [:pry, :__binding__]

关于ruby - 为什么 Object.instance_methods(false) 在 Ruby 中不返回预期的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48595087/

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