I am just so excited right now. I was watching Dave Thomas’ (not the Wendy’s guy) keynote talk from RubyConf 2008, in which he proposes several “forks” of Ruby. At about 40 minutes in, he discusses having a fork of Ruby that has real closures instead of blocks. I thought to myself, “Self, that sounds a lot like Brat.” Five seconds later, he mentioned the problem with passing in multiple closure literals to a function: the comma is ugly.
some_method { do_stuff }, { 1 + 2 }
I agree! I think this is an ugly issue in Brat right now.
But then he proposed an awesome solution: if two closures are next to each other in the argument list, you don’t need a comma! Now you can do this:
some_method { do_stuff } { 1 + 2 }
This took approximately 2 minutes to implement for Brat.
Now instead of
while { x < 1 },
{
p x
x = x + 1
}
You can do
while { x < 1 } {
p x
x = x + 1
}
I think this is awesome and makes Brat a lot more attractive.
In fact, I went totally crazy so now you can do
x = 101
true? x > 100
{ p "> 100!" }
{ p "<= 100!" }
Just be careful when using bare variables:
true? a { p "truth!" } { p "lies!" }
This is parsed into:
true?(a({ p "truth!" }, { p "lies!" }))
This is so cool…now to update all of Brat’s docs with this syntax. :)

