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/