Bug #7662
closed
Unable to define a method with bare `**`
Added by wycats (Yehuda Katz) almost 12 years ago.
Updated almost 12 years ago.
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.
- 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.
=begin
You don't need (({**})) here.
A rest argument includes keyword hash if the method does not have keyrest argument.
=end
=begin
I think this is important for consistency. Consider:
def f(a, b, **)
# ...
super
end
=end
- 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 bare super
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.
- 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]
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0