From: "nobu (Nobuyoshi Nakada)" Date: 2021-11-06T05:00:40+00:00 Subject: [ruby-core:105955] [Ruby master Bug#18289] Enumerable#to_a should delegate keyword arguments to #each Issue #18289 has been updated by nobu (Nobuyoshi Nakada). jeremyevans0 (Jeremy Evans) wrote in #note-5: > nobu (Nobuyoshi Nakada) wrote in #note-4: > > Recently I've encountered similar issue with `grep(regexp, chomp: true)`. > > What's the issue with `grep`? If it is a keyword issue, we can probably fix it. Same as this issue. > > And `IO#each` has the separator and limit arguments, I wonder how to pass them. > > `IO#each` doesn't use keywords, so `to_a` should pass the arguments even before commit:e83c02a768af61cd0890a75e90bcae1119d8bd93: As the number of arguments of `#grep` is fixed, it won't be a problem in this case. And `#to_a` has delegated all arguments to `#each`, so it didn't have problems. But what about methods which have optional parameters, e.g. `Enumerable#count`? Although it's possible to make the first argument mandatory when passing arguments for `#each`, it doesn't feel very nice. ---------------------------------------- Bug #18289: Enumerable#to_a should delegate keyword arguments to #each https://bugs.ruby-lang.org/issues/18289#change-94502 * 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: