在Ruby 2.4和对于整数范围,Range(Enumerable)#sum
在优化的 直接返回一个结果,而无需遍历所有元素.
我不明白为什么enum.c
为Enumerable
模块定义相应的代码而不是range.c
为Range
类定义.
为什么要Enumerable
知道包含它的类(例如Range
,Hash
...)并检查它们的类型而不是让这些类重写Enumerable#sum
?
见enum.c
:
return int_range_sum(beg, end, excl, memo.v); # or hash_sum(obj, &memo);
Aleksei Mati.. 5
因为rb_range_values
可能是true
任意类实例(不仅是显式Range
s),我们都希望它们也被优化.
基本上,这意味着只要实例响应两者begin
和end
(和exclude_end?
btw),我们就会进入这种优化.
因为rb_range_values
可能是true
任意类实例(不仅是显式Range
s),我们都希望它们也被优化.
基本上,这意味着只要实例响应两者begin
和end
(和exclude_end?
btw),我们就会进入这种优化.