[ruby-core:96334] [Ruby master Feature#16432] Using `_1` inside `binding.irb` will cause unintended behavior

[email protected]
Newsgroups gmane.comp.lang.ruby.core
Message-ID <redmine.journal-83245.20191219141533.461b259edf6bc292@ruby-lang.org>
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:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.