动态创建 class 时初始化错误

Error in initialize when creating a class dynamically

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

创建此 class 的实例
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。

我的项目class是

module EmeraldFW

  class Project < EmeraldFW::Entity

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

我的 class 实体是

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 接收两个参数,我根据需要给了它两个参数。

可能是我看了很久,就是看不出原因。有人可以帮助我吗?

因为你的initialize方法写成"class"方法(class'单例方法),而应该是实例方法。由于这个事实,您使用 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>