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