gpt4 book ai didi

ruby - 类、模块、它们的特征类和方法查找

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

让我们打开类 Module 并向其添加一个方法:

class Module  
def foo
puts "phew"
end
end

我可以通过这样做来调用这个方法,

Class.foo

这是可以理解的,因为 Class 的类是 Class,它的父类(super class)是 Module。因此它可以调用 Module 中定义的实例方法。

relation between classes and modules

现在,下面的方法 bar 是在 Module 的特征类上定义的:

class Module  
def self.bar
puts "bar"
end
end

但是现在

Class.bar 

也有效。

谁能给我解释一下 Class 如何访问 Module 的特征类中的方法?


我想我现在明白了。方法查找并不像我之前解释的那样工作。当我执行 Class.foo 时,该方法在 Class 的特征类中搜索,然后是父类(super class),它一直是 Module 的特征类直到 BasicObject 的特征类,此时它转向自身(就像蛇吃自己的尾部)在 Class 中寻找方法(作为 ClassBasicObject 的特征类的父类(super class)),然后是它的父类(super class) Module,它在其中找到方法。

同样,当我执行 Class.bar 时,会在 Class 的特征类中搜索方法,然后在 Module 的特征类中搜索方法找到它。

当我做的时候

class Class   
def check
puts "class instance method"
end
end

class Module   
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end

猜猜我这样做时的输出是什么:

Class.check 

这是我目前的理解: current understanding

最佳答案

this blog post by Andrea Singh 中涉及 Eigenclasses 时,Ruby 的方法查找行为有一个相当全面的概述。 .值得注意的是,靠近最后的“特征类和类继承”部分包含一个有用的查找图,应该可以解决您的问题。

关于ruby - 类、模块、它们的特征类和方法查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475658/

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