Actions
Bug #21256
open
`it` value is wrapped in an array when that doesn't happen with numbered parameter
Description
I have the following script:
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.
Updated by mame (Yusuke Endoh) 6 days ago
- Status changed from Open to Assigned
- Assignee set to prism
Here is a repro without rspec.
class C
define_method(:foo) do
p it
end
end
class D < C
def foo(*args)
super(*args)
end
end
D.new.foo(1)
$ ./local/bin/ruby --parser=parse.y t.rb
1
$ ./local/bin/ruby --parser=prism t.rb
[1]
Updated by Earlopain (Earlopain _) about 23 hours ago
Thanks for that info, it allowed me to make a potential fix: https://github.com/ruby/ruby/pull/13108
Actions
Like1
Like2Like0