Actions
Bug #12717
closedOptional argument treated as kwarg
Bug #12717:
Optional argument treated as kwarg
Description
When you define a method with an optional argument and keyword arguments (whether explicitly or with options splat) the defaulted argument can not take a hash argument, instead it is interpreted as keyword arguments:
class Foo
def self.options(value = nil, **options)
puts value.inspect
puts options.inspect
end
def self.kwarg(value = nil, kw: nil)
puts value.inspect
puts kw.inspect
end
def self.splat(*args, kw: nil)
puts args.inspect
puts kw.inspect
end
end
Foo.options({})
# nil
# {}
Foo.kwarg({})
# nil
# nil
Foo.splat({})
# []
# nil
Foo.options({ key: :value })
# nil
# {:key=>:value}
Foo.kwarg({ key: :value })
# ArgumentError: unknown keyword: key
Foo.splat({ key: :value })
# ArgumentError: unknown keyword: key
I would expect the output to be:
Foo.options({})
# {}
# {}
Foo.kwarg({})
# {}
# nil
Foo.splat({})
# [{}]
# nil
Foo.options({ key: :value })
# {:key=>:value}
# {}
Foo.kwarg({ key: :value })
# {:key=>:value}
# nil
Foo.splat({ key: :value })
# [{:key=>:value}]
# nil
Actions