On Nov 13, 2007, at 8:54 PM, Raul Parolari wrote: > James Gray wrote: > >> >> Does this give you some ideas? >> >> class Tree >> def initialize(name) >> @name = name >> @leaves = Array.new >> end >> >> attr_reader :name >> >> def <<(leaf_name) >> @leaves << self.class.new(leaf_name) >> self >> end >> .. > > I played with this Tree for a while (amazed by its simplicity and > functionality); just a small problem when connecting (and printing) > Trees to each other. A small touch to the << method does it: > > def <<(leaf_name) > case leaf_name > when String > @leaves << self.class.new(leaf_name) > when Tree > @leaves << leaf_name > else raise > end > self > end Yeah, that's much better. I actually used a structure close to this, with more niceties of course, for a binary tree I needed. I was surprised at how easy it was to put together and how flexible it was. I believe the actual each() method from that one was: def each(&block) block[@left] if @left block[self] block[@right] if @right end James Edward Gray II