From: eregontp@... Date: 2020-09-18T20:13:45+00:00 Subject: [ruby-core:100042] [Ruby master Bug#17178] Procs with kw:def/**kw lose elements when called with a single Array Issue #17178 has been updated by Eregon (Benoit Daloze). Assignee set to matz (Yukihiro Matsumoto) jeremyevans0 (Jeremy Evans) wrote in #note-3: > I'm not sure the loss of backwards compatibility is worth it, and this will break backwards compatibility. It would only break code that explicitly loses arguments that way, which I would think is never intended. It's probably also quite rare to use any keyword arguments for blocks. The fact we (AFAIK) did not have many bug reports about this before sounds to me like very few people ever run into this weird behavior. Assigned to matz. ---------------------------------------- Bug #17178: Procs with kw:def/**kw lose elements when called with a single Array https://bugs.ruby-lang.org/issues/17178#change-87592 * Author: Eregon (Benoit Daloze) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * ruby -v: ruby 3.0.0dev (2020-09-18T09:12:58Z master e1cca08a6d) [x86_64-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- ``` $ ruby -ve '{a: 1}.each_pair { |a, kw: :def| p [a,kw] }' ruby 3.0.0dev (2020-09-18T09:12:58Z master e1cca08a6d) [x86_64-linux] [:a, :def] # bug, should be [[1, 2], :def] $ ruby -ve '{a: 1}.each_pair { |a, **kw| p [a,kw] }' ruby 3.0.0dev (2020-09-18T09:12:58Z master e1cca08a6d) [x86_64-linux] [:a, {}] # bug, should be [[1, 2], {}] ``` So the value of the key-value pair is lost and not assigned to any argument. This seems a general problem of Proc, not just #each_pair: ``` $ ruby -e 'proc { |a, kw: :def| p [a,kw] }.call(1,2)' [1, :def] # understandable $ ruby -e 'proc { |a, kw: :def| p [a,kw] }.call([1,2])' [1, :def] # bug, should be [[1, 2], :def] $ ruby -e 'proc { |a, **kw| p [a,kw] }.call(1,2)' [1, {}] # understandable $ ruby -e 'proc { |a, **kw| p [a,kw] }.call([1,2])' [1, {}] # bug, should be [[1, 2], {}] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: