[ruby-core:122813] [Ruby Bug#21256] `it` value is wrapped in an array when that doesn't happen with numbered parameter
From:
"Earlopain (Earlopain _) via ruby-core" <ruby-core@...>
Date:
2025-07-18 08:17:30 UTC
List:
ruby-core #122813
Issue #21256 has been updated by Earlopain (Earlopain _).
Sorry about that. It looks like removing the first handling of `PM_IT_PARAMETERS_NODE` you wrote about in https://github.com/ruby/ruby/pull/13947 runs into https://bugs.ruby-lang.org/issues/20965 / https://github.com/ruby/ruby/commit/667a0f9f928be843a0810f2c61b633be1f8cd46a
For example the change
```
1) Failure:
TestProc#test_parameters_lambda [/home/mame/work/ruby/test/ruby/test_proc.rb:1445]:
<[[:req]]> expected but was
<[[:req, :it]]>.
```
is consistent with how numbered parameters are handled:
```
proc { _1 }.parameters(lambda: true)
=> [[:req, :_1]]
```
But yeah, looks like it is not so trivial. I will leave the fix up to someone else more experienced.
----------------------------------------
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-114100
* Author: Earlopain (Earlopain _)
* Status: Open
* 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/