From: "Earlopain (Earlopain _) via ruby-core" <ruby-core@...>
Date: 2025-04-13T13:29:17+00:00
Subject: [ruby-core:121643] [Ruby Bug#21256] `it` value is wrapped in an array when that doesn't happen with numbered parameter

Issue #21256 has been updated by Earlopain (Earlopain _).


Thanks for that info, it allowed me to make a potential fix: https://github.com/ruby/ruby/pull/13108

----------------------------------------
Bug #21256: `it` value is wrapped in an array when that doesn't happen with numbered parameter
https://bugs.ruby-lang.org/issues/21256#change-112697

* Author: Earlopain (Earlopain _)
* Status: Assigned
* Assignee: prism
* ruby -v: ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
I have the following script:

```rb
require "bundler/inline"

gemfile do
  source "https://rubygems.org"

  gem "rspec-core", "3.13.3"
  gem "rspec-expectations", "3.13.3"
end

require "rspec/autorun"
require "rspec/expectations"

RSpec::Matchers.define :example do
  chain(:foo) { pp _1 }
  chain(:bar) { pp it }
end

RSpec.describe "demo" do
  it do
    example.foo(1)
    example.bar(2)
  end
end
```

It calls two methods were the only difference is that one accesses the argument with `_1`, the other with `it`. It prints the following:
```
1
[2]
```

So, `it` for some reason wraps it in an array. I appologise for the reproduction script, it uses `rspec` and the amount of metaprogramming it uses makes it impossible for me to reduce this further.

When running with `parser=parse.y`, the expected output is returned (just `2`, no array). I also tested against current ruby-dev and it also happens there.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/