我对3个不同文件中的模块有不同的定义,我想根据用户交互动态加载它们。使用Kernel.load()
方法仅在第一次加载某个文件时才能成功运行。有没有人知道我应该使用哪种方法来加载文件,而不是关于它之前是否已经加载过?
该模块包含一些在应用程序的其他部分中使用的常量。根据用户的选择,应加载一个具有该常量特定值的具体模块,以便它们具有适当的值。
答案 0 :(得分:0)
最有可能的是,你没有采取正确的方法解决问题。
如果您可以使用相同的API定义许多不同的模块并使用您想要的动态模块,为什么要以不同的方式定义相同的模块?
你在做什么模块?
您是否正在使用mixin?
if condition
object.extend Module1
else
object.extend Module2
end
object.method(bla,blabla)
您只是将其方法作为静态方法调用吗?
module = if condition
Module1
else
Module2
end
module.method(bla, bla bla)
不应使用常量,而应使用静态方法或静态方法返回带有“常量”值的哈希值。常数不是很实用。
鉴于您希望使用模块来存储数据而不是逻辑,您可能应该使用类来代替:
class Options
attr_reader :constant_1,:constant_2
end
class Options1 < Options
def initialize
@constant_1="value1"
@constant_2="value2"
end
end
class Options2 < Options
def initialize
@constant_1="value3"
@constant_2="value4"
end
end
options= condition ? Options1.new : Options2.new
options.constant_1 # => intended value