From: Robert Klemme Date: 2010-06-29T02:35:04+09:00 Subject: Re: passing a block to yield On 28.06.2010 14:52, Andy Bogdanov wrote: > I was trying to make an iterator that goes through a simple tree > structure something like that: > > class Node > .. > def each_child(&block) > @children.each { |child| yield(child) { child.each_child(&block) } } > end > .. > end > > so i could generate a simple html menu: > > puts "" > > But it turns out that Ruby syntax prohibits passing blocks to yield. A > simple workaround is to use block.call instead of yield everywhere. > > Is there any good reason for that limitation? There is no point in passing a block to yield because yield implicitly calls the block passed to the current method. I think what you really want is this: def each_child(&b) b[self] # or b.call(self) or simply yield self @children.each {|ch| ch.each_child(&b)} self end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/