gpt4 book ai didi

ruby - 在另一个模块中扩展模块

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

我正在尝试定义几个模块,以便轻松地将一些实例和类方法添加到其他类中,这就是我正在做的事情:

module Foo
module Bar
def speak
puts "hey there"
end
end
module Baz
extend Foo::Bar

def welcome
puts "welcome, this is an instance method"
end
end
end

class Talker
include Foo::Baz
end

Talker.new.welcome
Talker.speak

这个的输出是:

welcome, this is an instance method
undefined method 'speak' for Talker.class (NoMethodError)

我期待 Talker 有 'speak' 方法,因为它包含 Foo::Baz,它本身扩展了 Foo::Bar。

我错过了什么?

最佳答案

你可以试试这个:

module Baz
extend Foo::Bar

def self.included(base)
base.send :extend, Foo::Bar
end

def welcome
puts "welcome, this is an instance method"
end
end

这将自动扩展包含 Baz 的所有类。

附言:

extend Foo::Bar in module Baz 是原始片段,此代码不影响方法 def self.included(base).

关于ruby - 在另一个模块中扩展模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487414/

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