Forum: Ruby-core named params don't always capture passed named args

88144e3f7b9d7e3435a41492887b3999?d=identicon&s=25 Mean Login (mean_l)
on 2014-08-16 05:46
(Received via mailing list)
Issue #10142 has been updated by First Last.


Nobuyoshi Nakada wrote:
> Mandatory arguments have priority over keywords arguments.

instead of just restating what is, why don't you say why it should be
this way.

before keyword args existed as first class citizens, it made sense for
the keyword hash to be captured by the first free mandatory param,
however now that they are first class, it makes no sense for the keyword
arg x not to map to the first class keyword param x.

so before keyword args are turned into a hash and consumed a mandatory
param, actual keyword params shoud get a chance to consume them, few
more examples:

irb(main):014:0> def foo(a, b:); [a, b] end
=> :foo
irb(main):015:0> foo c: 1, b: 1
ArgumentError: missing keyword: b

irb(main):019:0> def foo(a, b: 0); [a, b] end
=> :foo
irb(main):020:0> foo c: 1, b: 1
=> [{:c=>1, :b=>1}, 0]

in all three cases keyarg b: should map to keyparam b:

why is that not preferable?


----------------------------------------
Bug #10142: named params don't always capture passed named args
https://bugs.ruby-lang.org/issues/10142#change-48370

* Author: First Last
* Status: Rejected
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
~~~ruby
irb(main):007:0> def foo(a, b: nil); [a, b] end
:foo
irb(main):008:0> foo b: 1
[
  [0] {
    :b => 1
  },
  [1] nil
]
~~~
______________________________

would be better if this raised
This topic is locked and can not be replied to.