In article <47B3990A.9020709 / dan42.com>,
  Daniel DeLorme <dan-ml / dan42.com> writes:

> So I think it has to do with blocks using multiple-assignment semantics 
> and lambdas using function-arguments semantics. Since there is no such 
> thing as "def foo(x,)" then "lambda{|x,|" is considered as the 
> equivalent of "def foo(x)". Do I have it wrong?

Blocks are blocks.  It is neigher lambda nor multiple
assigment.

For example,
lambda {|x| p x }.call(1,2,3) causes ArgumentError and
x = 1,2,3 assignes x to [1,2,3] but
def m() yield 1,2,3 end; m {|x| p x } binds x to 1.
(ruby 1.9.0 (2008-02-13 revision 15455) [i686-linux])

I wrote the semantics as a test:
TestRubyYieldGen in test/ruby/test_yield.rb.
-- 
Tanaka Akira