从Subclass-Object创建对象

时间:2013-06-10 14:24:46

标签: ruby oop

说我有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)

怎么做?

1 个答案:

答案 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">