Actions
Bug #15027
closedWhen Struct#each method is overriden Struct#select and Struct#to_a use wrong collections
Description
Bug¶
Here's the code snippet that should reproduce the problem:
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
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0