Issue #16432 has been updated by osyo (manga osyo).


Thanks comments :)

> This is because the eval code is executed at the current context exactly.
> Another choice is to raise a syntax error at the runtime.

Yes, and if `_1` is nested, a syntax error will occur.

```ruby
proc {
  _1
  # error: numbered parameter is already used in
  (1..10).map { _1 + _1 }
}.call 42
```

If `_1` is nested, I think it is better to runtime error rather than unintended behavior.

```ruby
# Expected behavior in case of runtime error
# OK
irb> _1
=> 42
# OK
irb> _1 + _1
=> 84
# NG: Runtime error
irb> (1..10).map { _1 + _1 }
```


----------------------------------------
Feature #16432: Using `_1` inside `binding.irb` will cause unintended behavior
https://bugs.ruby-lang.org/issues/16432#change-83262

* Author: osyo (manga osyo)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
## Summary

Calling `binding.irb` in a block that uses `_1` and using `_1` in `irb` will cause unintended behavior.


## Steps to reproduce

1. Use `_1` in block
2. Use `binding.irb` in block
3. Use block with `_1` in `binding.irb`

```ruby
# test.rb
proc {
  binding.irb
  _1
}.call 42
```

```ruby
# binding.irb
irb> (1..10).map { _1 + _1 }
```


## Expected behavior

```ruby
irb> _1
 => 42
irb> (1..10).map { _1 + _1 }
 = > [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
```


## Actual behavior

* Refers to the `_1` of the block that called` binding.irb`

```ruby
irb> _1
 => 42
irb> (1..10).map { _1 + _1 }
 = > [84, 84, 84, 84, 84, 84, 84, 84, 84, 84]
```

I think this is an unintended behavior for the user.






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