创建动态类时初始化时出错

时间:2016-11-12 11:36:44

标签: ruby class methods initialization instance

我在命令行收到一些参数。他们中的第一个告诉我我必须创建什么样的uby对象才能执行所需的操作。我将此参数存储在@entity中,然后通过执行

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

当我尝试创建其中一个实例时,我发现了一个错误,比如Project。

我的项目类是

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)

我不知道为什么会这样。正如您所看到的,初始化接收两个参数,并根据需要给它两个参数。

也许是因为我长时间看着这个,但我无法看清原因。有人会帮助我吗?

1 个答案:

答案 0 :(得分:2)

这是因为您的initialize方法被写成&#34; class&#34;方法(类&#39;单例方法),而它应该是一个实例方法。由于您使用initialize调用的原始new方法:

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

没有参数。

要解决self.方法定义中 删除 self.initialize部分的问题。

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

Foo.new(:bar, :baz)
#=> #<Foo:0x007fa6d23289a0 @bar=:bar, @baz=:baz>