2016-03-29 6 views
4
にモジュールにクラスを追加

だが、私はそうのような動的モジュールを作成しましょう:は動的ルビー

app = Object.const_set('CoolModule', Module.new) 

は、そのモジュールにクラスを追加するにはとにかくはありますか?このような何か?

app << (class Application; end) 

は、私は基本的に次のように行く

module 'CoolModule'.turnThisIntoAModule 
    class Application < Rails::Application 
    config.blabla = 2 
    end 
end 
+4

最初のコードがどのように関係するかは不明です。あなたは 'CoolModule'で始めることはできません? – sawa

+0

なぜ私たちがどのように答えるのに役立つかについてのより多くの文脈。 – engineersmnky

+0

あなたのタイトルには「動的に」という単語が含まれていますが、あなたの質問の文章では、クラスを動的に作成するとは言いません。 –

答えて

1

あなたは、次の例のように、動的に名前のモジュールのクラスを追加することができます:あなたは、コールの時点でappオブジェクトへのアクセス権を持っている場合は

app = Object.const_set('CoolModule', Module.new) 

Object.const_get('CoolModule'). 
    const_set('Application', Class.new(Rails::Application) do 
    config.blabla = 2 
    end) 

、それは当然のことながら、Object.const_get('CoolModule')式を置き換えることができます。

Module.module_evalはそれ自体を示唆していますが、残念ながらそのブロック形式のスコープ付き検索は行いません。それは文字列引数形式で行いますが、私は文字列に対してのevalsの使用をお勧めしません。

2

あなたはちょうど同じことを繰り返して取得しようとしています。

CoolModule.const_set("SomeVeryDynamicName", Module.new do 
    class Application < Rails::Application 
    config.blabla = 2 
    end 
end) 
+1

Downvoter:shame! –

+1

かなりあいまいな質問に対する良い答えです。しかしここでは、内部モジュールが動的に作成されるモジュールにモジュールを追加しています(問題の名前に基づいて答えが正しい場合は正しい)。最終的には、CoolModule :: Applicationを呼び出してクラスを取得できるようにしたいと考えています。 – Ingo