Feature #6869
openDo not treat `_` parameter exceptionally
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.
- 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.
-
I propose to treat repeated arguments in methods and in blocks the same way (do not know which one).
-
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)