質問: ``` class Bar def foo puts "barbarbar" end end class Foo < Bar def initialize(obj) obj.foo end def foo puts "foofoofoo" end end Foo.new(Foo.new(Bar.new)) ``` この出力結果が barbarbar foofoofoo になるのはなぜでしょうか? Foo.new(Foo.new(Bar.new))の そもそもこれが何してるのかがわかりません。
回答: 1)Foo.new(Foo.new(Bar.new))の一番外側のFoo.newを実行するために引数を評価します 2)Foo.new(Bar.new))を実行するために Bar.newを評価します 3) 2)のFooのinitialize で bar.foo が実行されます => "barbarbar" 4) 1)のFooのinitializeが実行され、foo.foo が実行されます => "foofoofoo" >そもそもこれが何してるのかがわかりません。 さっぱりわかりません