[#105450] [Ruby master Feature#18228] Add a `timeout` option to `IO.copy_stream` — "byroot (Jean Boussier)" <noreply@...>
SXNzdWUgIzE4MjI4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJ5cm9vdCAoSmVhbiBCb3Vzc2llciku
11 messages
2021/09/27
[ruby-core:105284] [Ruby master Bug#15027] When Struct#each method is overriden Struct#select and Struct#to_a use wrong collections
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2021-09-16 05:16:57 UTC
List:
ruby-core #105284
Issue #15027 has been updated by matz (Yukihiro Matsumoto).
Status changed from Assigned to Rejected
The methods may be overridden in the subclass. The assumption in this report seems to be too much.
Rejected.
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-93693
* Author: bruno (Bruno Sutic)
* Status: Rejected
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* 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)
struct_enumerable_fix2.patch (1.51 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>