【问题标题】:Error in initialize when creating a class dynamically动态创建类时初始化错误
【发布时间】:2017-03-26 12:56:14
【问题描述】:

我在命令行收到一些参数。其中第一个告诉我必须创建什么样的 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)

我不知道为什么会这样。如您所见,initialize 接收两个参数,我根据需要给了它两个参数。

也许是因为我看这个很久了,但我就是看不出原因。有人能帮帮我吗?

【问题讨论】:

    标签: ruby class methods initialization instance


    【解决方案1】:

    这是因为您的initialize 方法被写为“类”方法(类的单例方法),而它应该是一个实例方法。由于这个事实,您使用 new 调用的原始 initialize 方法:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2013-02-27
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多