gpt4 book ai didi

Ruby mixin 覆盖方法说明

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

我刚刚遇到了这种我不太理解的行为。

module M
def foo
"module_foo"
end
end

class C
def foo
"class_foo"
end
include M
end

puts C.new.foo

为什么 C.new.foo 实际上返回 class_foo ?我非常确定该方法应该被模块中的方法覆盖。另一件事,将 "class_foo" 替换为 super 会使 C.new.foo 返回 `"module_foo"

这实际上看起来像是在定义类实例方法之前以某种方式包含了模块。你能解释一下吗?

最佳答案

来自 Programming Ruby 关于 mixin 的部分:

In fact, mixed-in modules effectively behave as superclasses.

所以你的经历是正常的。你的模块 M 是你的类 C 的父类(super class)

因此类 C 中的 foo 方法覆盖了模块 M 中的 foo 方法

关于Ruby mixin 覆盖方法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827826/

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