Project

General

Profile

Actions

Feature #6869

open

Do not treat `_` parameter exceptionally

Added by alexeymuranov (Alexey Muranov) over 8 years ago. Updated 4 months ago.

Status:
Open
Priority:
Normal
Target version:
-
[ruby-core:47195]

Description

I started by commenting on #6693, but i have realized that this is a slightly different request.

I propose to not treat the variable name "_" exceptionally. Current behavior:

 {0=>1}.each_with_index { |_,_| p _ } # [0, 1]

prints "[0, 1]", but

 {1=>2}.each_with_index { |x,x| p x } # SyntaxError: (eval):2: duplicated argument name

raises "SyntaxError: (eval):2: duplicated argument name".

Similarly for methods:

 def f(_, _)
   _
 end
 f(0, 1) # => 0

 def f(x, x)
   x
 end # => SyntaxError: (eval):2: duplicated argument name

Observe also that the use of repeated _ parameter is not consistent between methods and blocks: for methods the value is the first assigned value, and for blocks it is the array of all the assigned values.

  1. I propose to use the same rule for all variables, without distinguishing _ specially.

In particular i propose to allow to repeat any variable, not only _, in block or method arguments without raising an error.

There may be several solutions what the repeated argument will hold: it may hold the array of all assigned values, the first assigned value, the last assigned value, the first non-nil assigned value, or the last non-nil assigned value.

  1. I propose to treat repeated arguments in methods and in blocks the same way (do not know which one).

  2. For unused variables i propose to introduce a special placeholder, for example "-" not followed by anything other than a delimiter (comma or bracket):

 each_with_index { |-, value| puts value }

 -, -, suffix = parse(name)
Actions

Also available in: Atom PDF