Ruby 重新加载以前加载的模块
我在3个不同的文件中有不同的模块定义,我想根据用户交互动态加载它们。使用Ruby 重新加载以前加载的模块,ruby,rhomobile,Ruby,Rhomobile,我在3个不同的文件中有不同的模块定义,我想根据用户交互动态加载它们。使用Kernel.load()方法只能在第一次加载某个文件时成功运行。有人知道我应该使用哪种方法来始终加载文件,而不是考虑它是否已经加载过 该模块包含应用程序其他部分中使用的一些常量。根据用户的选择,应该加载一个具体的模块,其中包含该常数的特定值,以便它们具有适当的值。最可能的情况是,您没有采取正确的方法解决问题 如果可以使用相同的API定义多个不同的模块并动态使用所需的模块,那么为什么要以不同的方式定义相同的模块呢 你在用这个
Kernel.load()
方法只能在第一次加载某个文件时成功运行。有人知道我应该使用哪种方法来始终加载文件,而不是考虑它是否已经加载过
该模块包含应用程序其他部分中使用的一些常量。根据用户的选择,应该加载一个具体的模块,其中包含该常数的特定值,以便它们具有适当的值。最可能的情况是,您没有采取正确的方法解决问题 如果可以使用相同的API定义多个不同的模块并动态使用所需的模块,那么为什么要以不同的方式定义相同的模块呢 你在用这个模块做什么 你用它做调味品吗
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
类选项
属性读取器:常数1,:常数2
结束
类别选项1<选项
def初始化
@常数_1=“值1”
@常数_2=“值2”
结束
结束
类别选项2<选项
def初始化
@常数_1=“值3”
@常数_2=“值4”
结束
结束
选项=条件?选项1.new:选项2.new
options.constant_1#=>预期值
该模块包含一些用于应用程序其他部分的常量。根据用户的选择,应加载一个具体模块,其中包含该常量的特定值,以便它们具有适当的值。你认为方法应该有所不同吗?你能给我举个例子吗?谢谢非常感谢你的回答。在这种情况下,使用类似乎是一个更好的主意。