From: eregontp@... Date: 2020-03-19T01:27:27+00:00 Subject: [ruby-core:97545] [Ruby master Bug#12706] Hash#each yields inconsistent number of args Issue #12706 has been updated by Eregon (Benoit Daloze). Does this cause any issue in practice? AFAIK it's not worth the incompatibility and could break many things. We had to follow MRI behavior here for Hash#each and Hash#map in TruffleRuby, e.g., https://github.com/oracle/truffleruby/issues/1944 IMHO the right thing to do is to yield 2 values here, and having an Array for backward compatibility if arity != 2 seems OK. ---------------------------------------- Bug #12706: Hash#each yields inconsistent number of args https://bugs.ruby-lang.org/issues/12706#change-84704 * Author: bughit (bug hit) * Status: Closed * Priority: Normal * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- ```ruby def foo(a, b) p [a, b] end def bar(a, b = 2) p [a, b] end foo_lambda = method(:foo).to_proc bar_lambda = method(:bar).to_proc {a: 1}.each(&foo_lambda) {a: 1}.each(&bar_lambda) ``` From #12705, yielding to method lambdas uses lambda/method arg semnatics the yield to foo produces `[:a, 1]` suggesting that each is yielding two values `yield key, value` but yield to bar produces `[[:a, 1], 2]` suggesting that each is yielding one value `yield [key, value]` it would be better if you always knew what to expect from it -- https://bugs.ruby-lang.org/ Unsubscribe: