1

3 つの異なるファイルにモジュールの異なる定義があり、ユーザーの操作に応じて動的にロードしたいと考えています。メソッドの使用Kernel.load()は、特定のファイルが初めてロードされたときにのみ正常に機能します。以前にロードされたかどうかに関係なく、常にファイルをロードするためにどの方法を使用すればよいか知っている人はいますか?

モジュールには、アプリケーションの他の部分で使用されるいくつかの定数が含まれています。ユーザーの選択に応じて、その定数の特定の値を持つ 1 つの具象モジュールをロードして、適切な値を持つようにする必要があります。

4

1 に答える 1

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
于 2011-11-21T16:03:11.703 に答える