Actions
Bug #13700
closedEnumerable#sum may not work for Ranges subclasses due to optimization
Bug #13700:
Enumerable#sum may not work for Ranges subclasses due to optimization
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15]
Description
Enumerable#sum is optimized for integer ranges. Unfortunately, this can break subclasses:
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.
Actions