Issue #16344 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Open to Closed

Assigning to the numbered parameter is now a SyntaxError even if it is a local variable in scope, so current master has your expected behavior.

Related to this, accessing the numbered parameter inside a block in master accesses the numbered parameter, even if a local variable of the same name exists in the outer scope:

```ruby
_1 = :local_variable
proc{_1}.call(:block_arg)
# 2.7: => :local_variable
# 3.0: => :block_arg
```

I think we should make assigning to a numbered parameter a SyntaxError instead of a warning outside of a block (it was a warning in 2.7).  I'll submit a feature request for that.

----------------------------------------
Bug #16344: Can be assigned to numbered parameter when after used _1
https://bugs.ruby-lang.org/issues/16344#change-85900

* Author: osyo (manga osyo)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.7.0dev (2019-11-11T23:39:38Z trunk 2407e89725) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
## Steps to reproduce

1. Define local variable `_1` outside block
2. Call Numbered parameter in block
3. Assign for `_1`


## Expected behavior

```ruby
_1 = :local_variable
proc {
  _1
  # Error: Can't assign to numbered parameter _1
  _1 = 42
}
```


## Actual behavior

```ruby
_1 = :local_variable
proc {
  _1
  # No error
  _1 = 42
}
```

Cannot be assinged to numbered parameter from #16293.
However, can be assinged to numbered parameter if defined local variable _1 outside block.
I think this is a bug.







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