2016-11-12 5 views
1

コマンドラインでいくつかのパラメータが表示されます。それらの最初の1つは、私が望む動作を実行するために作成しなければならないubyオブジェクトの種類を教えてくれます。私は@entityに、このパラメータを格納し、私は、これらのインスタンスのいずれかを作成しようとするプロジェクトを言うとき、私はエラーをgetingいクラスを動的に作成するときの初期化でエラーが発生する

entity_class = "EmeraldFW::#{@entity.capitalize}".split('::').inject(Object) {|o,c| o.const_get c} 
entity_instance = entity.new(@arguments,@options) 
entity_instance.execute_command 

行うことにより、このクラスのインスタンスを作成します。

マイプロジェクトのクラスは

module EmeraldFW 

    class Project < EmeraldFW::Entity 

    def self.initialize(args,opts) 
     @valid_option = [ :language, :test, :database, :archetype ] 
     super(args,opts) 
    end 
. 
. 
. 

で、私のクラスのエンティティは

module EmeraldFW 

    class Entity 

    attr_accessor :entity_type, :valid_commands 

    def self.initialize(args,opts) 
     @args = args 
     @opts = clean_option(opts) 
    end 

. 
. 
. 

私のエラーが

/home/edvaldo/software/github/emeraldfw21/lib/emeraldfw.rb:41:in `initialize': wrong number of arguments (given 2, expected 0) (ArgumentError) 

で、なぜこれが起こっている私にはわからないです。ご覧のとおり、initializeは2つの引数を受け取り、必要に応じて2つの引数を与えました。

私はこれを長い間見ているかもしれませんが、理由は分かりません。誰か助けてくれますか?

答えて

2

initializeメソッドは「クラス」メソッド(クラス 'シングルトンメソッド)として記述されていますが、これはインスタンスメソッドである必要があります。原因あなたはnewで呼び出しているという事実元initialize方法へ:

entity_instance = entity.new(@arguments,@options) 

引数を取りません。 self.initializeメソッド定義からself.部分を削除問題にを解決するには


class Foo 
    def initialize(bar, baz) 
    @bar = bar 
    @baz = baz 
    end 
end 

Foo.new(:bar, :baz) 
#=> #<Foo:0x007fa6d23289a0 @bar=:bar, @baz=:baz> 
関連する問題