Project

General

Profile

Actions

Bug #16643

closed

Array#dig converts keywords to positional hash

Added by Dan0042 (Daniel DeLorme) about 4 years ago. Updated about 4 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0p0 (2019-12-25 revision a65e8644fb) [x86_64-linux]
[ruby-core:97207]

Description

The following behavior for dig looks very weird to me:

o=Object.new
def o.dig(**kw) p [kw] end
o.dig(x:1)     
#no warning
#[{:x=>1}]
[o].dig(0, x:1)
#warning: Using the last argument as keyword parameters is deprecated
#[{:x=>1}]

o=Object.new
def o.dig(a, **kw) p [a,kw] end
o.dig(x:1)
#warning: Passing the keyword argument as the last hash parameter is deprecated
#[{:x=>1}, {}]
[o].dig(0, x:1)
#no warning
#[{:x=>1}, {}]

So the keywords are interpreted as a positional hash, resulting in the opposite of the behavior I would expect.

This would be easy to fix by changing rb_obj_dig to use

        return rb_check_funcall_with_hook_kw(obj, id_dig, argc, argv,
                                             no_dig_method, obj,
                                             RB_PASS_CALLED_KEYWORDS);

What this just an oversight? I can't think of a rationale for the current behavior.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0