Yukihiro Matsumoto wrote:
Hi,
>> I like it! Looks much more uniform and consistent with function
>> syntax than {|...| ...}
>
>I assume you mean method syntax. But why is that important? Until
>this new syntax was posted, I'd never heard anyone complain that they
>found it hard to recognize {|...| } as a code block. Now there seems
>to be a retroactive sentiment in the air that the block syntax is, and
>always has been, obscure or garbled.lambda is an anonymous function, so that it requires full syntax of
function/method argument, including optional arguments, keyword
arguments, block arguments etc., not just parallel assignment as in
plain block parameters.>If uniformity is important maybe def should be redesigned:
>
> def x |a,b,c=1|
> endStop joking.
Unlike others, I have never given uniformity a top priority.
If lambda === Method (minus context), I don't think he would be joking.
def x |a,&b|
b[a]
end
x(1) def |a|
a+1
end
But that does nothing to solve | ambiguity. So forget 'em and go back
to parens:
def x(a,&b)
b[a]
end
x(1) def n(a,b)
a+1
end
Such that #def returns a lambda/Method. The name of the lambda, n,
would be local to the block, and while usually extraneous, it can be
useful as a reference to the block itself.
[:a,:b,:c].each def n(i)
p n.count;
end
#=> 1 2 3
That still leaves { } notation. If { == def and } == end, as D. Black
"jests", at first it seems ambiguous. But actually I don't think it is.
x(1) { n(a,b) a+1 }
is decernable from:
x(1) { n(a,b) ; a+1 }
for example.
Yet I agree, over unifority can be hard on the eyes. Which is why #do
makes a good substitute for #def in block contexts.
T.
···
In message "Re: ruby-dev summary 26468-26661" > on Thu, 4 Aug 2005 22:38:06 +0900, "David A. Black" <dblack@wobblini.net> writes: