From: shevegen@... Date: 2018-08-26T06:53:11+00:00 Subject: [ruby-core:88651] [Ruby trunk Bug#15027] When Struct#each method is overriden Struct#select and Struct#to_a use wrong collections Issue #15027 has been updated by shevegen (Robert A. Heiler). Since matz asked for feedback, just a comment - I have no particular pro or con opinion per se, mostly because I very rarely use the Struct/OpenStruct family; I usually just end up writing a "real" class instead and adapt it to what is necessary. The only suggestion I would like to make in regards to Struct is to mention this in the documentation of Struct ( https://ruby-doc.org/core-2.5.1/Struct.html ) so that it may not surprise ruby users who use Struct; could also mention Jeremy's example of using the default Enumerable behaviour for Struct. ---------------------------------------- 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-73707 * 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: