From: "Earlopain (Earlopain _) via ruby-core" Date: 2025-07-18T08:17:30+00:00 Subject: [ruby-core:122813] [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 _). 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/