Project

General

Profile

Actions

Bug #7662

closed

Unable to define a method with bare `**`

Bug #7662: Unable to define a method with bare `**`

Added by wycats (Yehuda Katz) almost 13 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
ruby -v:
2.0.0dev
Backport:
[ruby-core:51269]

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 13 years ago Actions #1 [ruby-core:51275]

  • 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 13 years ago Actions #2 [ruby-core:51280]

=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 13 years ago Actions #3 [ruby-core:51281]

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

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

Updated by mame (Yusuke Endoh) almost 13 years ago Actions #4 [ruby-core:51282]

  • 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.

Updated by nobu (Nobuyoshi Nakada) almost 13 years ago Actions #5

  • 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]
Actions

Also available in: PDF Atom