Ruby重写数组类的初始化方法
基本上,我希望有我自己的数组类和我自己的方法 我想通过传递一个数组长度的参数来初始化它,它应该实例化一个具有给定长度并用零填充的新数组。所以我写了这样的东西:Ruby重写数组类的初始化方法,ruby,arrays,initialization,overriding,Ruby,Arrays,Initialization,Overriding,基本上,我希望有我自己的数组类和我自己的方法 我想通过传递一个数组长度的参数来初始化它,它应该实例化一个具有给定长度并用零填充的新数组。所以我写了这样的东西: class Foo < Array def initialize(length) Array.new(length, 0) end end 我还尝试使用for循环n次用零填充这个数组,但没有成功 我做错了什么?因为您继承了阵列,所以可以执行以下操作: class Foo < Array def initi
class Foo < Array
def initialize(length)
Array.new(length, 0)
end
end
我还尝试使用for循环n次用零填充这个数组,但没有成功
我做错了什么?因为您继承了阵列,所以可以执行以下操作:
class Foo < Array
def initialize(length)
super(length, 0)
end
end
由于从阵列继承,因此可以执行以下操作:
class Foo < Array
def initialize(length)
super(length, 0)
end
end
Classnew的实现有点像这样:
class Class
def new(*args, &block)
obj = allocate
obj.initialize(*args, &block)
obj
end
end
[注意:实际上,initialize是私有的,因此需要以反射的方式调用它,但您知道这一点。]
IOW:initialize的返回值被完全忽略
如果要更改new的返回值,则需要覆盖new。有点明显,你不觉得吗?但是在这种情况下,简单地委托给超类的initialize也是可能的,而且通常是一个好主意,如中所示。Classnew的实现看起来有点像这样:
class Class
def new(*args, &block)
obj = allocate
obj.initialize(*args, &block)
obj
end
end
[注意:实际上,initialize是私有的,因此需要以反射的方式调用它,但您知道这一点。]
IOW:initialize的返回值被完全忽略
如果要更改new的返回值,则需要覆盖new。有点明显,你不觉得吗?但是在这种情况下,简单地委托给超类的initialize也是可能的,并且通常是一个好主意,如中所示