gpt4 book ai didi

ruby:模块可以自动执行初始化代码吗?

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

我已经将一些功能放在一个模块中,由一个对象进行扩展。我希望在扩展模块时自动执行该功能。但是,它必须在实例的上下文中执行,而不是模块。

module X
extend self

@array = [1,2,3]

end
obj.extend(X)

目前,@array 不会在实例中创建。我不想强制开发人员调用一些初始化方法,因为对于每个模块,他需要知道要调用的唯一方法的名称。这可能吗?

最佳答案

您可以使用 Module#extended扩展和 BasicObject#instance_exec 上执行代码的钩子(Hook)(或 BasicObject#instance_eval )用于在扩展对象的上下文中执行任意代码:

module X
def self.extended(obj)
obj.instance_exec { @array = [1,2,3] }
end
end

class O
attr_reader :array
end

obj = O.new

obj.array # => nil

obj.extend(X)

obj.array # => [1, 2, 3]

关于ruby:模块可以自动执行初始化代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652973/

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