Ruby 重新加载以前加载的模块

Ruby 重新加载以前加载的模块,ruby,rhomobile,Ruby,Rhomobile,我在3个不同的文件中有不同的模块定义,我想根据用户交互动态加载它们。使用Kernel.load()方法只能在第一次加载某个文件时成功运行。有人知道我应该使用哪种方法来始终加载文件,而不是考虑它是否已经加载过 该模块包含应用程序其他部分中使用的一些常量。根据用户的选择,应该加载一个具体的模块,其中包含该常数的特定值,以便它们具有适当的值。最可能的情况是,您没有采取正确的方法解决问题 如果可以使用相同的API定义多个不同的模块并动态使用所需的模块,那么为什么要以不同的方式定义相同的模块呢 你在用这个

我在3个不同的文件中有不同的模块定义,我想根据用户交互动态加载它们。使用
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#=>预期值

该模块包含一些用于应用程序其他部分的常量。根据用户的选择,应加载一个具体模块,其中包含该常量的特定值,以便它们具有适当的值。你认为方法应该有所不同吗?你能给我举个例子吗?谢谢非常感谢你的回答。在这种情况下,使用类似乎是一个更好的主意。