gpt4 book ai didi

ruby - Class 怎么可能属于 Class 类而没有 Class 实例方法呢?

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

我正在研究 Ruby 解释器是如何实现的,并且出现了一个问题,但我还没有得到答案。这就是标题中的那个:因为 Class (r_cClass) 将 super 设置为自身(忽略元类,因为实际上 superr_cClass 的元类),如果我向 Class 对象发送一个方法,这将在 Class 的方法表中查找' 类(class)。但是 Class 的类是 Class,所以我不应该最终寻找 Class 的实例方法吗?但事实并非如此,因为在文档中 Class 类方法和 Class 实例方法是分开的。在Ruby的eval.c中的search_method中,我没有发现对Class类有什么特别的检查。任何人都可以阐明这一点吗?

最佳答案

您对它应该如何工作的信念似乎是正确的,但我不确定为什么您认为它不能那样工作。

在 Ruby 1.8.7 中:

irb> a = Class.new.methods - Object.new.methods
=> [... 36 element array ...]
irb> b = Class.methods - Object.new.methods
=> [... 37 element array ...]
irb> b - a
=> ["nesting"]

一个普通的类实例(Class.new)有36个实例方法。如果我看一下 Class 本身,它也是一个普通的类实例,它具有相同的 36 个实例方法,再加上 1 个额外的类方法(嵌套),它的存在只是因为它是从其父类(super class) Module 继承的。

请注意,将实例方法添加到 Class 会自动将其添加为类方法,但将类添加到 Class 的元类则不会。

irb> class Class ; def everywhere ; true ; end ; end
irb> class << Class ; def only_singleton ; true ; end ; end
irb> Class.everywhere
=> true
irb> Class.new.everywhere
=> true
irb> Class.only_singleton
=> true
irb> Class.new.only_singleton
NoMethodError: undefined method 'only_in_singleton' for #<Class:0x4800ac8>

关于ruby - Class 怎么可能属于 Class 类而没有 Class 实例方法呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545110/

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