From: Jon Leighton Date: 2011-12-14T18:48:23+09:00 Subject: [ruby-core:41645] [ruby-trunk - Bug #5761][Open] Array#flatten(N) calls to_ary on the (N+1)-level objects Issue #5761 has been reported by Jon Leighton. ---------------------------------------- Bug #5761: Array#flatten(N) calls to_ary on the (N+1)-level objects http://redmine.ruby-lang.org/issues/5761 Author: Jon Leighton Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux] $ cat flatten.rb class Foo def respond_to?(name, include_private = true) puts "respond_to?(#{name})" super end def method_missing(name, *args) puts "method_missing(#{name})" super end end puts "[[Foo.new]].flatten(1)" p [[Foo.new]].flatten(1) puts puts "[[[Foo.new]]].flatten(2)" p [[[Foo.new]]].flatten(2) puts puts "[[[Foo.new]]].flatten(1)" p [[[Foo.new]]].flatten(1) $ ruby flatten.rb [[Foo.new]].flatten(1) method_missing(to_ary) respond_to?(to_ary) [#] [[[Foo.new]]].flatten(2) method_missing(to_ary) respond_to?(to_ary) [#] [[[Foo.new]]].flatten(1) [[#]] $ ruby -v ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux] Expected behaviour: no method calls are made on the (N+1)-level objects. For what it's worth, this is the 1.8.7 output: $ ruby flatten.rb [[Foo.new]].flatten(1) respond_to?(to_ary) [#] [[[Foo.new]]].flatten(2) respond_to?(to_ary) [#] [[[Foo.new]]].flatten(1) [[#]] -- http://redmine.ruby-lang.org