From: "rits (First Last)" Date: 2013-07-30T07:02:13+09:00 Subject: [ruby-core:56263] [ruby-trunk - Bug #8693] lambda invoked by yield acts as a proc with respect to return Issue #8693 has been updated by rits (First Last). alexeymuranov (Alexey Muranov) wrote: > rits (First Last) wrote: > > what is the reason for this? > > > > why should yield and block.call behave differently? > > My guess: the ampersand operator has converted the "lambda" to a "block" (so the lambda object is lost). it's not lost: irb(main):011:0> def m1; p Proc.new; yield end; def m2; l = ->{return 0}; p l; m1 &l; 1 end; m2 # # => 0 which makes sense, being in the block slot keeps the lambda alive ---------------------------------------- Bug #8693: lambda invoked by yield acts as a proc with respect to return https://bugs.ruby-lang.org/issues/8693#change-40756 Author: rits (First Last) Status: Rejected Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0p247 (2013-06-27) [x64-mingw32] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN irb(main):004:0> def m1; yield end; def m2; m1 &->{return 0}; 1 end; m2 => 0 -- http://bugs.ruby-lang.org/