说我有2个课程:
Class Foo
attr_accessor :bar
end
Class Baz < Foo
end
我正在创建一个Foo
的实例,然后想要一个Baz
的实例,其中包含Foo实例的数据:
f = Foo.new(:bar => "Hi World")
# Doesnt work?
b = Baz.new(f)
怎么做?
答案 0 :(得分:2)
Baz
的实例,其中包含Foo
个实例的数据
由于构造函数已经接受属性作为哈希,因此您可以创建一个方法来将Foo
的属性作为哈希值返回:
class Foo
attr_accessor :bar
def initialize(attributes={})
@bar = attributes[:bar]
end
def attributes
{:bar => bar}
end
end
class Baz < Foo
end
现在,您可以从以下属性创建Baz
实例:
f = Foo.new(:bar => "Hi World") #=> #<Foo:0x007fd09a8614c0 @bar="Hi World">
f.attributes #=> {:bar=>"Hi World"}
b = Baz.new(f.attributes) #=> #<Baz:0x007fd09a861268 @bar="Hi World">