Project

General

Profile

Actions

Bug #7662

closed

Unable to define a method with bare `**`

Added by wycats (Yehuda Katz) almost 12 years ago. Updated almost 12 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 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 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.

Actions #5

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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0