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 Schler) * 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>