假设我有两个班级:
class House
def initialize(width, height)
@width = width
@height = height
end
end
和:
class BrickHouse < House
end
当我创建一个房子时:
house = House.new(33,22)
如何从这个房子创建一个新的Brickhouse
:
我试过了:
brickhouse = BrickHouse.new(house)
但那没有用!我错了什么?感谢
答案 0 :(得分:1)
BrickHouse继承自House。这里的House类initialize方法需要两个参数,所以显然所有子类都需要两个参数。
如果你想为传递params(在父类中指定)的子类创建实例,只需使父类初始化params为可选,如下所示。
class House
def initialize(height = 0, weight = 0)
@height = height
@weight = weight
end
end
class BrickHouse < House
end
现在我们将能够使用init params为零创建子类的实例,
brick_house = BrickHouse.new
如果你传递初始化init参数的init params
brick_house = BrickHouse.new(10, 20)
答案 1 :(得分:1)
如果您的意思是要创建Brickhouse
的实例,使其两个实例变量的值与house
的值相同,则为:
Brickhouse.new(house.instance_variable_get(:@width),
house.instance_variable_get(:@height)).
然而,此Brickhouse
和house
的实例完全不相关。
您也可以写:...instance_variable_get("@width")
。
答案 2 :(得分:0)
试试这个(当这些是getFeeStatement
个对象时):
ActiveRecord
我认为应该这样做。即使house = House.new(33,22)
brickhouse = BrickHouse.new(house.attributes)
可能非常复杂,House
也应该继承这些方法,现在也应该继承它们的属性。