Project

General

Profile

Bug #11236

inconsistent behavior using ** vs hash as method parameter

Added by akostadinov (Aleksandar Kostadinov) over 3 years ago. Updated about 2 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
[ruby-core:69494]

Description

Using ruby 2.2.2 I see this work:

[18] pry(main)> def test(cmd, opts={})
[18] pry(main)*   puts cmd,opts
[18] pry(main)* end  
=> :test
[19] pry(main)> test(:ads, :d => 6, :f => :gah, {a:3,b:4} => 3)
ads
{:d=>6, :f=>:gah, {:a=>3, :b=>4}=>3}
=> nil

But this fails:

[2] pry(main)> def test(cmd, **opts)
[2] pry(main)*   puts cmd, opts
[2] pry(main)* end  
[9] pry(main)> test(:ads, :d => 6, :f => :gah, {a:3,b:4} => 3)
ArgumentError: wrong number of arguments (2 for 1)
from (pry):2:in `test'

Related issues

Related to Ruby trunk - Feature #14183: "Real" keyword argumentOpen

History

#1 [ruby-core:69495] Updated by jeremyevans0 (Jeremy Evans) over 3 years ago

This is expected behavior, keyword argument hashes only support symbol keys, not hash keys. I suppose the error message could be better, though.

#2 [ruby-core:69500] Updated by nobu (Nobuyoshi Nakada) over 3 years ago

  • Description updated (diff)

What message would be better?

#3 [ruby-core:69502] Updated by akostadinov (Aleksandar Kostadinov) over 3 years ago

Nobuyoshi Nakada wrote:

What message would be better?

Unsupported key type?

btw what is the reason to have that limitation? Not that I need this functionality, I just happened to notice the difference...

#4 Updated by hsbt (Hiroshi SHIBATA) 10 months ago

#5 [ruby-core:88866] Updated by marcandre (Marc-Andre Lafortune) about 2 months ago

When last argument is hash-like but has keys that are not symbols, we could output instead "wrong number of arguments (2 for 1); note that the last argument has keys that are not symbols and thus was not considered as keyword parameters"

Also available in: Atom PDF