Thanks matz and all. The define_method() trick hadn't occurred to me  
-- almost the same, indeed. Why couldn't block parameter syntax be  
extended to accept optional args: do |x, y=0| ? I Realize that this is  
only meaningful for the hypothetical def usage, but come to think of  
it I see no reason blocks couldn't accept optional args in cases where  
they're .called().

And doesn't calling a proc with [] smell like a cute hack (hey, we've  
got this bracket method...) to anyone else?

On Nov 5, 2007, at 12:24 AM, Yukihiro Matsumoto wrote:

> Hi,
>
> In message "Re: def blah do |x| -- alternate method definition syntax"
>    on Mon, 5 Nov 2007 14:07:21 +0900, Joe Holt <joe07734 / gmail.com>  
> writes:
>
> |Friend wondered why a method definition couldn't be like this:
> |
> |def blah do |x|
> |	...
> |end
>
> This syntax disallows optional arguments.  We can't just parse them.
> If you really want to define a method with block parameter style, you
> can do:
>
>  define_method(:blah) do |x|
>    ...
>  end
>
> Almost same, isn't it?
>
> 							matz.
>