From: "ko1 (Koichi Sasada)" <redmine@...>
Date: 2012-07-14T16:17:08+09:00
Subject: [ruby-core:46431] [ruby-trunk - Bug #6039][Rejected] lambda vs proc; #to_ary w/ splat bug


Issue #6039 has been updated by ko1 (Koichi Sasada).

Status changed from Assigned to Rejected

This behavior is intended.

----------------------------------------
Bug #6039: lambda vs proc; #to_ary w/ splat bug
https://bugs.ruby-lang.org/issues/6039#change-28051

Author: ddebernardy (Denis de Bernardy)
Status: Rejected
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: 
Target version: 
ruby -v: 1.9.3


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



-- 
http://bugs.ruby-lang.org/