Actions
Bug #11068
closedunable to ommit an optional keyarg if the previous arg is an optional hash
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
Description
irb(main):001:0> def foo(hash = {}, a: nil); [hash, a] end
=> :foo
irb(main):002:0> foo({b: 1}, a: 1)
=> [{:b=>1}, 1]
irb(main):003:0> foo({b: 1})
ArgumentError: unknown keyword: b
from (irb):1:in `foo'
from (irb):3
from /home/alex/.rbenv/versions/2.2.2/bin/irb:11:in `<main>'
irb(main):004:0>
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- Related to Feature #14183: "Real" keyword argument added
Updated by jeremyevans0 (Jeremy Evans) about 5 years ago
- Status changed from Open to Closed
With the acceptance of #14183, this code now emits warnings as the behavior will change in Ruby 3:
foo({b: 1})
# (irb):53: warning: The last argument is used as the keyword parameter
# (irb):51: warning: for `foo' defined here
# ArgumentError (unknown keyword: :b)
In Ruby 3, you will not get a warning, and the code will work as expected. To get the Ruby 3 behavior currently, you can do:
foo({b: 1}, **(;{}))
# => [{:b=>1}, nil]
Actions
Like0
Like0Like0