Project

General

Profile

Bug #16473

New deprecated warning disallows keyword arguments bypassing

Added by puchuu (Andrew Aladjev) 7 months ago. Updated 7 months ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
2.7.0
[ruby-core:96628]

Description

Hello. I see that ruby 2.7.0 prints unnecessary deprecated warning during arguments bypassing.

def kw(a: 1)
  puts "kw #{a}"
end

def non_kw(a = {}, *args)
  puts "non kw #{a}"
  kw *args
end

non_kw({ :a => 2 }, :a => 2)
non_kw({ :a => 3 })
non_kw

The right output is:

non kw {:a=>2}
kw 2
non kw {:a=>3}
kw 1
non kw {}
kw 1

Ruby 2.7.0 provides deprecated warning:

warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

*args is bypassing arguments without any conversion. It looks like ruby converts last hash to keywords and than converts it back to hash. I think it is a bug.


Related issues

Related to Ruby master - Feature #16463: Fixing *args-delegation in Ruby 2.7: ruby2_keywords semantics by default in 2.7.1Closedmatz (Yukihiro Matsumoto)Actions

Also available in: Atom PDF