Bug #7662

Unable to define a method with bare `**`

Added by Yehuda Katz over 1 year ago. Updated over 1 year ago.

[ruby-core:51269]
Status:Closed
Priority:Normal
Assignee:Nobuyoshi Nakada
Category:-
Target version:next minor
ruby -v:2.0.0dev Backport:

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.

Associated revisions

Revision 38725
Added by Nobuyoshi Nakada over 1 year ago

parse.y: bare kwrest_mark

  • parse.y (fkwrest): allow bare kwrestmark as valid syntax. its semantics is still undefined. [Bug #7662]

History

#1 Updated by Yukihiro Matsumoto over 1 year ago

  • Assignee set to Nobuyoshi Nakada
  • Target version set to next minor

I consider this as a bug. Since it's minor issue, I defer fix to next minor.

Matz.

#2 Updated by Nobuyoshi Nakada over 1 year ago

=begin
You don't need (({**})) here.

A rest argument includes keyword hash if the method does not have keyrest argument.
=end

#3 Updated by Charlie Somerville over 1 year ago

=begin
I think this is important for consistency. Consider:

def f(a, b, **)
# ...
super
end
=end

#4 Updated by Yusuke Endoh over 1 year 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 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.

#5 Updated by Nobuyoshi Nakada over 1 year 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 (fkwrest): allow bare kwrestmark as valid syntax. its semantics is still undefined. [Bug #7662]

Also available in: Atom PDF