[ruby-core:96334] [Ruby master Feature#16432] Using `_1` inside `binding.irb` will cause unintended behavior
From:
nobu@...
Date:
2019-12-19 14:15:33 UTC
List:
ruby-core #96334
Issue #16432 has been updated by nobu (Nobuyoshi Nakada).
It is same as the following code without irb.
```ruby
proc {
p eval("(1..10).map{_1+_1}") #=> [84, 84, 84, 84, 84, 84, 84, 84, 84, 84]
_1
}.call(42)
```
This is because the `eval` code is executed at the current context exactly.
Another choice is to raise a syntax error at the runtime.
----------------------------------------
Feature #16432: Using `_1` inside `binding.irb` will cause unintended behavior
https://bugs.ruby-lang.org/issues/16432#change-83245
* 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>