Bug #6039
closedlambda vs proc; #to_ary w/ splat bug
Description
to_ary apparently gets called in edge cases when a proc has a splat argument:
good = Class.new do
def to_ary
[:bad]
end
end.new
foo = lambda { |*bar| bar.first }
foo.call(good)
foo = lambda { |bar, *baz| bar }
foo.call(good)
foo = proc { |*bar| bar.first }
foo.call(good)
foo = proc { |bar, *baz| bar }
foo.call(good)
RUBY_VERSION
=> "1.9.3"
good = Class.new do
?> def to_ary
[:bad]
end
end.new
=> #<#Class:0x00000100a39c50:0x00000100a399d0>
?> foo = lambda { |*bar| bar.first }
=> #<Proc:0x00000100a1e248@(irb):324 (lambda)>
foo.call(good)
=> #<#Class:0x00000100a39c50:0x00000100a399d0>
?> foo = lambda { |bar, *baz| bar }
=> #<Proc:0x000001009deb48@(irb):327 (lambda)>
foo.call(good)
=> #<#Class:0x00000100a39c50:0x00000100a399d0>
?> foo = proc { |*bar| bar.first }
=> #Proc:0x000001009aed80@(irb):330
foo.call(good)
=> #<#Class:0x00000100a39c50:0x00000100a399d0>
?> foo = proc { |bar, *baz| bar }
=> #Proc:0x000001010102a0@(irb):333
foo.call(good)
=> :bad
Updated by ddebernardy (Denis de Bernardy) over 12 years ago
Possibly related:
Updated by ddebernardy (Denis de Bernardy) over 12 years ago
Possibly related: http://bugs.ruby-lang.org/issues/5694
Updated by ko1 (Koichi Sasada) over 12 years ago
- Assignee set to matz (Yukihiro Matsumoto)
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
- Status changed from Open to Assigned
Updated by ko1 (Koichi Sasada) about 12 years ago
- Status changed from Assigned to Rejected
This behavior is intended.