0

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

怎么做?

4

1 回答 1

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">
于 2013-06-10T15:05:53.070 回答