Bug #8418

when all params are optional, named arg hash maps to the first available param

Added by rits (First Last) about 7 years ago. Updated over 6 years ago.

Target version:
ruby -v:
ruby 2.0.0p195 (2013-05-14 revision 40734) [i686-linux]


irb(main):028:0> def foo(arg = 1, options = {}); {arg: arg, options: options}; end; foo(a: 1)
=> {:arg=>{:a=>1}, :options=>{}}

since positional args can't follow the named hash, perhaps the named hash should map to the last possible param?

Updated by rits (First Last) about 7 years ago

that would also make it correspond to the new syntax

irb(main):034:0> def foo(arg = 1, **options); {arg: arg, options: options}; end; foo(a: 1)
=> {:arg=>1, :options=>{:a=>1}}

Updated by nobu (Nobuyoshi Nakada) about 7 years ago

  • Status changed from Open to Rejected

That's the reason that keyword argument is introduced.

Updated by rits (First Last) over 6 years ago

but isn't it good to have correspondence between keyword args and keyword hash?

when keyword args are used explicitly at invocation (foo a: 1, foo **hash) but the method signature does not use keyword params, it seems natural to bind the resulting hash to the last possible param, not the first

Also available in: Atom PDF