我在命令行收到一些参数。他们中的第一个告诉我我必须创建什么样的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)
我不知道为什么会这样。正如您所看到的,初始化接收两个参数,并根据需要给它两个参数。
也许是因为我长时间看着这个,但我无法看清原因。有人会帮助我吗?
答案 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>