Issue #17167 has been updated by matz (Yukihiro Matsumoto).

Status changed from Open to Closed

Unlike `[[1, 2], [3, 4]].each{|v| v.each{|v| p v}}`, nested numbered parametersin `[[1, 2], [3, 4]].each{_1.each{p _1}}` has no clue like `|v|` for nesting.
It is very hard to tell two `_1` have different meanings.

It is a possible choice to allow users to shoot their feet, but we made a different decision here to avoid confusion.

Matz.


----------------------------------------
Bug #17167: Nested numbered parameters are not allowed
https://bugs.ruby-lang.org/issues/17167#change-87545

* Author: sawa (Tsuyoshi Sawada)
* Status: Closed
* Priority: Normal
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
Numbered parameter is allowed in an ordinary block:

```ruby
[[1, 2], [3, 4]].each{p _1}
# >> [1, 2]
# >> [3, 4]
```

as well as in a nested block:

```ruby
[[1, 2], [3, 4]].each{|a| a.each{p _1}}
# >> 1
# >> 2
# >> 3
# >> 4
```

but not in both at the same time:

```ruby
[[1, 2], [3, 4]].each{_1.each{p _1}}
# >> SyntaxError ((irb):2: numbered parameter is already used in) outer block here
# >> [[1, 2], [3, 4]].each{_1.each{p _1}}
                      ^~
```

I feel that this should be a bug. 


Note that an error is not raised when an ordinary block parameter with the same name is used in the outer and the inner blocks:

```ruby
[[1, 2], [3, 4]].each{|v| v.each{|v| p v}}
# >> 1
# >> 2
# >> 3
# >> 4
```

If this is not a bug, the specification of numbered parameters is too complex. How am I supposed to use numbered parameters in such use case as above?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>