ruby blocks (Re: foreach, an analogy)

Bill Baxter dnewsgroup at billbaxter.com
Wed Oct 18 22:14:06 PDT 2006


Jarrett Billingsley wrote:
> "Bill Baxter" <dnewsgroup at billbaxter.com> wrote in message 
> news:eh6rva$1anj$2 at digitaldaemon.com...
> 
>> I think it may be Ruby blocks.
> 
> They're just anonymous functions which happen to come after the function 
> call's closing paren.. I wouldn't really say that they're incredibly 
> earth-shattering or the answer to everything.  

We don't need the answer to everything, just the answer to how to 
generalize and make foreach more consistent.

 > And D can almost do them
> already.  Instead of:
> 
> something.each do |item|
>     puts item
> end
> 
> You can have:
> 
> something.each((int item) {
>     writefln(item);
> });
> 
> In fact the "allowing a trailing function literal" has been proposed (by 
> myself included), which would allow:
> 
> something.each()(int item)
> {
>     writefln(item);
> }
> // maybe there'd need to be a semicolon here?
> 
> Which is damn close if you ask me. 

That does look pretty good.
How do you write an inorder traverser?  With Ruby:

def traverse
   left.traverse {|node| yield node }
   yield self
   right.traverse {|node| yield node }
end

Then you do:

atree.traverse()(Node node)
{
     writefln(item);
}


--bb



More information about the Digitalmars-d-announce mailing list