[#81492] [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — normalperson@...

Issue #13618 has been reported by normalperson (Eric Wong).

12 messages 2017/06/01

[ruby-core:81861] [Ruby trunk Bug#13700] Enumerable#sum may not work for Ranges subclasses due to optimization

From: hanmac@...
Date: 2017-06-30 11:39:33 UTC
List: ruby-core #81861
Issue #13700 has been updated by Hanmac (Hans Mackowiak).


shevegen (Robert A. Heiler) wrote:
> Reminds me a bit of what hanmac wrote elsewhere; I can't find it right now and forgot it mostly already but I think he also mentioned some unexpected behaviour when ... subclassing I think? Or some custom class that he wrote...

my comment was for https://bugs.ruby-lang.org/issues/13663
with String#upto you can't overwrite the internal String#<=>

----------------------------------------
Bug #13700: Enumerable#sum may not work for Ranges subclasses due to optimization
https://bugs.ruby-lang.org/issues/13700#change-65584

* Author: sos4nt (Stefan Schテシテ殕er)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
`Enumerable#sum` is optimized for integer ranges. Unfortunately, this can break subclasses:

```ruby
class StepTwoRange < Range
  def each(&block)
    step(2, &block)
  end
end

r = StepTwoRange.new(0, 10)
r.to_a     #=> [0, 2, 4, 6, 8, 10]

r.to_a.sum #=> 30
r.sum      #=> 55
```

The optimization should therefore only be triggered for instances of `Range` and not for instances of subclasses. (or more specifically, not for subclasses overriding `each`)

If this behavior is intentional, it should at least be documented.



-- 
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>

In This Thread

Prev Next