gpt4 book ai didi

ruby - 一个 Ruby 类如何初始化所有包含的模块?

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

先看下面的示例代码:

module First
def initialize
puts "Second init"
end

def first
puts "first"
end
end

module Second
def initialize
puts "Second init"
end

def second
puts "second"
end
end

class MyClass
include First
include Second

def initialize
super()
end
end

c = MyClass.new
c.first
c.second

这个程序的输出是:

Second init
first
second

从输出中,我们可以看到 MyClass 已经很好地包含了 FirstSecond 模块,因为它同时具有 first( )second() 方法。

MyClass 构造函数中,我尝试用 super() 初始化两个包含的模块,但似乎只调用了 Second 的构造函数.

如何初始化所有包含的模块?

最佳答案

include 在当前类和它的祖先类之间插入一个模块。由于First,然后Second被包含,MyClass的祖先是

[MyClass, Second, First, ...]

关键字super 查找祖先类中除自身类之外第一个可用的方法。它会找到 Second#initialize

如果你想积累祖先模块的initialize方法,那么这样做:

module First
def initialize
puts "Second init"
end
end

module Second
include First
def initialize
super
puts "Second init"
end
end

class MyClass
include Second
def initialize
super
end
end

关于ruby - 一个 Ruby 类如何初始化所有包含的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604241/

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