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 に答える