From: "nobu (Nobuyoshi Nakada)" Date: 2021-11-06T02:06:55+00:00 Subject: [ruby-core:105953] [Ruby master Bug#18289] Enumerable#to_a should delegate keyword arguments to #each Issue #18289 has been updated by nobu (Nobuyoshi Nakada). Recently I've encountered similar issue with `grep(regexp, chomp: true)`. And `IO#each` has the separator and limit arguments, I wonder how to pass them. ---------------------------------------- Bug #18289: Enumerable#to_a should delegate keyword arguments to #each https://bugs.ruby-lang.org/issues/18289#change-94500 * Author: Ethan (Ethan -) * Status: Closed * Priority: Normal * ruby -v: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] * Backport: 2.6: DONTNEED, 2.7: REQUIRED, 3.0: REQUIRED ---------------------------------------- `Enumerable#to_a` has always delegated its arguments to `#each`, but it does not handle keyword arguments. This seems like an oversight. My project uses keyword arguments to an #each method, and this has broken Enumerable#to_a as of ruby 3 (and generates a warning on ruby 2.7). ```ruby class Foo include Enumerable def each(opt: ) yield 'foo' end end pp Foo.new.to_a(opt: 4) ``` ruby 2.4 ``` ["foo"] ``` ruby 2.7 ``` to_a_kw_arg_delegation.rb:8: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call to_a_kw_arg_delegation.rb:3: warning: The called method `each' is defined here ["foo"] ``` ruby 3 ``` to_a_kw_arg_delegation.rb:3:in `each': wrong number of arguments (given 1, expected 0; required keyword: opt) (ArgumentError) from to_a_kw_arg_delegation.rb:8:in `to_a' from to_a_kw_arg_delegation.rb:8:in `
' ``` ---Files-------------------------------- to_a_kw_arg_delegation.rb (101 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: