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