From: TAKAHASHI Masayoshi Date: 1999-10-22T00:20:09+09:00 Subject: [ruby-list:17904] Re: How to define iterator for tree? 高橋征義です。 Toshiro Kuwabara さん: > ツリーのような構造を持つ集合オブジェクトに対してイテレータを実装 > するのにどうすればいいか、で悩んでます。 こんな感じでいかがでしょう。 =begin Nodeがツリーの節のクラス。 =end class Node def initialize(name, *children) # 名前をつけてみました。 @name = name @children = children end attr_accessor :name def each4(&block) block.call(self) @children.each{|node| node.each4(&block) } end end ## テスト用 n1 = Node.new(1) n2 = Node.new(2) n3 = Node.new(3,n1,n2) n4 = Node.new(4,n1,n3) n4.each4{|node| print node.name,":" p node } > 一度Arrayに変換してからArray#eachってのも考えましたが、それだと > 敗北を認めたみたいで、ちょっと悔しいし。(^^;; これで勝利できるでしょうか? (^^; 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp