2011-11-21 101 views
1

我在3個不同的文件中有不同的模塊定義,我想根據用戶交互動態加載它們。第一次加載某個文件時,使用Kernel.load()方法僅對我成功運行。有誰知道我應該使用哪種方法來始終加載文件,而不是關於它之前是否已經加載過?Rhomobile重新加載以前加載的模塊

該模塊包含一些在應用程序的其他部分中使用的常量。根據用戶的選擇,應該加載一個具有該常數特定值的具體模塊,以便它們具有適當的值。

回答

0

很可能,您沒有采取正確的方法解決您的問題。

爲什麼要定義相同的模塊,如果您可以使用相同的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

該模塊包含了在應用程序的其它部分使用的一些常量。根據用戶的選擇,應該加載一個具有該常數特定值的具體模塊,以便它們具有適當的值。你認爲這種方法應該有所不同嗎?你能舉個例子嗎?謝謝! – Pablo

+0

編輯答案和問題。 –

+0

非常感謝您的回答。在這種情況下使用類似乎是一個更好的主意。 – Pablo