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

时间:2011-11-21 13:39:24

标签: ruby rhomobile

我对3个不同文件中的模块有不同的定义,我想根据用户交互动态加载它们。使用Kernel.load()方法仅在第一次加载某个文件时才能成功运行。有没有人知道我应该使用哪种方法来加载文件,而不是关于它之前是否已经加载过?

该模块包含一些在应用程序的其他部分中使用的常量。根据用户的选择,应加载一个具有该常量特定值的具体模块,以便它们具有适当的值。

1 个答案:

答案 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