From: matz@... Date: 2018-08-26T01:56:25+00:00 Subject: [ruby-core:88647] [Ruby trunk Bug#15027][Feedback] When Struct#each method is overriden Struct#select and Struct#to_a use wrong collections Issue #15027 has been updated by matz (Yukihiro Matsumoto). Status changed from Open to Feedback The proposed behavior is more consistent but slower. I am not sure it's a good idea to hinder performance by supporting consistency in the rare case. Any opinion? Matz. ---------------------------------------- Bug #15027: When Struct#each method is overriden Struct#select and Struct#to_a use wrong collections https://bugs.ruby-lang.org/issues/15027#change-73704 * Author: bruno (Bruno Sutic) * Status: Feedback * Priority: Normal * Assignee: * Target version: * ruby -v: 2.6.0dev * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- ### Bug Here's the code snippet that should reproduce the problem: ~~~ ruby class Foo < Struct.new(:bar) def each(&block) [:baz, :qux].each(&block) end end foo = Foo.new(:foo) foo.map(&:itself) # => [:baz, :qux] # OK foo.to_a # => [:foo] # NOT OK, expected [:baz, :qux] foo.select(&:itself) # => [:foo] # NOT OK, expected [:baz, :qux] ~~~ As you can see, even tho we defined another collection for use by overriding `#each`, the `to_a` and `select` still use `Struct`'s original collection. The problem seem to be with `Struct#to_a` and `Struct#select` methods from `struct.c` file that are defined unnecessarily. ### Proposed solution The attached solution simply deletes `Struct#select` and `Struct#to_a`. A couple tests are added to show everything still works as before. Please let me know if I can provide any more info and I'll be ready to do so. ---Files-------------------------------- struct_enumerable_fix.patch (2.8 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: