Alex McHale wrote:

> Are these idioms ["foo {...}" and "foo do ... end"] identical in all
> but their syntax?  Or is there an underlying difference to them?

Mostly. There's only a small difference in how they bind to methods:

> irb(main):001:0> def foo(*args, &block); puts "foo got block" if block; end
> irb(main):002:0> def bar(*args, &block); puts "bar got block" if block; end
> irb(main):003:0> foo bar {}
> bar got block
> irb(main):004:0> foo bar do end
> foo got block

Hope this helps. :)

> Thanks!

No problem.

Regards,
Florian Gross