Bug #7662
closedUnable to define a method with bare `**`
Description
This works:
def foo(*)
end
This does not:
def foo(**)
end
This does not:
def foo(*, **)
end
I use bare *
often in combination with bare super
to extend a superclass without being brittle to its exact signature. With keyword arguments, this seems like it will be impossible. I am opening several other related issues.
Updated by matz (Yukihiro Matsumoto) almost 12 years ago
- Assignee set to nobu (Nobuyoshi Nakada)
- Target version set to 2.6
I consider this as a bug. Since it's minor issue, I defer fix to next minor.
Matz.
Updated by nobu (Nobuyoshi Nakada) almost 12 years ago
=begin
You don't need (({**})) here.
A rest argument includes keyword hash if the method does not have keyrest argument.
=end
Updated by Anonymous almost 12 years ago
=begin
I think this is important for consistency. Consider:
def f(a, b, **)
# ...
super
end
=end
Updated by mame (Yusuke Endoh) almost 12 years ago
- Status changed from Open to Assigned
Thanks for your feedback. I'm neutral for bare **
itself.
But it is too late a bit to discuss the spec and there is an obvious workaround:
def foo(**dummy)
end
Of course, we can add bare `**' later (say, in 2.0.1).
BTW:
I use bare
*
often in combination with baresuper
to extend a superclass without being brittle to its exact signature.
I don't think that it is a good idea to ignore arguments silently just for a bare super
.
You should call super with explicit argument delegation if your overriding method changes the signature of its parent method.
Updated by nobu (Nobuyoshi Nakada) almost 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r38725.
Yehuda, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
parse.y: bare kwrest_mark
- parse.y (f_kwrest): allow bare kwrest_mark as valid syntax. its
semantics is still undefined. [Bug #7662] [ruby-core:51269]