Bug #7663
closed
Unable to invoke a method with `**kwargs` if the receiver doesn't define keyword arguments
Added by wycats (Yehuda Katz) almost 12 years ago.
Updated almost 12 years ago.
Description
This works:
def hello
puts "hello"
end
hello(*[])
This does not:
def hello
puts "hello"
end
hello(**{})
I may be misunderstanding the idea behind the keyword arguments, but I would expect them to behave similarly to regular arguments when used with splat.
- Status changed from Open to Rejected
Unlike regular argument, empty keyword argument is not equal to empty regular list.
Matz.
In the current design, keyword arguments are NOT omittable at a callee side.
In other words, you cannot pass keyword arguments to a method that does not support keyword argments.
Other possible behavior is to ignore the passed arguments silently (as you expected), but I'm afraid if it is rather error-prone than useful. It tends to hide bugs.
If you really want to do so, you can use **
parameter explicitly.
def hello(**dummy)
puts "hello"
end
A bare **
(#7662) is indeed useful in this use case. I'm not so positive to this use case itself, though.
Also available in: Atom
PDF
Like0
Like0Like0