Project

General

Profile

Actions

Bug #18289

closed

Enumerable#to_a should delegate keyword arguments to #each

Added by Ethan (Ethan -) about 3 years ago. Updated almost 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
[ruby-core:105944]

Description

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).

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 `<main>'

Files

to_a_kw_arg_delegation.rb (101 Bytes) to_a_kw_arg_delegation.rb Ethan (Ethan -), 11/05/2021 11:04 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0