From: mail@... Date: 2017-01-26T13:44:47+00:00 Subject: [ruby-core:79269] [Ruby trunk Bug#12705] yielding args to a lambda uses block/proc rather than lambda/method semantics Issue #12705 has been updated by Stefan Sch����ler. I encountered this bug myself and while searching for a reason behind it, I found this: https://github.com/ruby/ruby/blob/v2_4_0/vm_insnhelper.c#L2435 ```c static VALUE vm_yield_with_cfunc(rb_thread_t *th, const struct rb_captured_block *captured, VALUE self, int argc, const VALUE *argv, VALUE block_handler) { int is_lambda = FALSE; /* TODO */ ``` That static `FALSE` value doesn't look right ... ---------------------------------------- Bug #12705: yielding args to a lambda uses block/proc rather than lambda/method semantics https://bugs.ruby-lang.org/issues/12705#change-62687 * Author: bug hit * Status: Assigned * Priority: Normal * Assignee: Koichi Sasada * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: REQUIRED, 2.4: REQUIRED ---------------------------------------- ```ruby def yield_test yield 1, 2 yield [1, 2] end def foo(a, b) p a, b end method_lambda = method(:foo).to_proc normal_lambda = ->a, b{p a, b} yield_test(&normal_lambda) yield_test(&method_lambda) ``` the yield of [1, 2] to the method_lambda produces an argument error as you would expect but the same yield to the normal_lamda does not, the single array arg is slpatted per block/proc semantics -- https://bugs.ruby-lang.org/ Unsubscribe: