gpt4 book ai didi

ruby - 如何使用名称在参数中给出的模块扩展 ruby​​ 中的对象?

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

我想用一个模块扩展一个 Ruby 对象,但我希望能够在运行时更改要使用的模块,并且能够根据对象来改变它。换句话说,我想将模块的名称作为参数传递给 extend。我该怎么做?

我尝试了以下方法:

module M1
end

module M2
end

class C
def initialize module_to_use
extend module_to_use
end
end

m = get_module_name_from_config_file
c1 = C.new m

(假设方法 get_module_name_from_config_file 返回一个带有所需模块名称的 String - 这里是 "M1""M2 ".)

但是我明白了:

error: wrong argument type String (expected Module).

因为mString 类型,显然不是Module。我也尝试将 m 作为一个符号,但我遇到了同样的问题(在错误消息中将 String 替换为 Symbol)。

那么,我可以将 m 转换成 Module 类型的东西吗?还是有其他方法可以实现此目的?

提前致谢。

最佳答案

你可以这样做(根据 Jörg W Mittag 的建议修改为使用 const_get)

module M1
end

module M2
end

class C
def initialize module_to_use
extend module_to_use
end
end

m = Module::const_get("M1")
c1 = C.new m

你上面的代码有一些错误,顺便说一句 - classmodule 应该是小写的。

关于ruby - 如何使用名称在参数中给出的模块扩展 ruby​​ 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320537/

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