From: hanmac@... Date: 2017-06-30T11:39:33+00:00 Subject: [ruby-core:81861] [Ruby trunk Bug#13700] Enumerable#sum may not work for Ranges subclasses due to optimization 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����ler) * 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: