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)
どうやってするの?
インスタンス
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">