我已经坚持了很长一段时间了。看看这个:
class SuperClass
def self.new(*args, **kwargs, &block)
i = allocate()
# Extra instance setup code here
i.send(:initialize, *args, **kwargs, &block)
return i
end
end
class Test < SuperClass
def initialize
puts "No args here"
end
end
该类SuperClass
基本上“重新实现”了默认new
方法,以便在initialize
.
现在,以下工作正常:
t = Test.allocate
t.send(:initialize, *[], **{}, &nil)
但是,这不会:
t = Test.new
ArgumentError:参数数量错误(1 代表 0) 从(撬):7:在“初始化”
它在这条线上失败SuperClass
:
i.send(:initialize, *args, **kwargs, &block)
但显然只有在方法中调用它才会失败new
。我已经确认args == []
,kwargs == {}
和block == nil
。
有人能解释一下吗?
红宝石版本:
ruby 2.2.3p173(2015-08-18 修订版 51636)[x86_64-linux]
请不要暗示我不要超载Class.new
。我知道我可以使用Class.inherited
andClass.append
来获得相同的结果。这个问题只是关于为什么调用initialize
失败。