当前位置:  开发笔记 > 后端 > 正文

为什么在Enumerable模块中定义了Range#sum?

如何解决《为什么在Enumerable模块中定义了Range#sum?》经验,为你挑选了1个好方法。

在Ruby 2.4和对于整数范围,Range(Enumerable)#sum在优化的 直接返回一个结果,而无需遍历所有元素.

我不明白为什么enum.cEnumerable模块定义相应的代码而不是range.cRange类定义.

为什么要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任意类实例(不仅是显式Ranges),我们都希望它们也被优化.

基本上,这意味着只要实例响应两者beginend(和exclude_end?btw),我们就会进入这种优化.



1> Aleksei Mati..:

因为rb_range_values可能是true任意类实例(不仅是显式Ranges),我们都希望它们也被优化.

基本上,这意味着只要实例响应两者beginend(和exclude_end?btw),我们就会进入这种优化.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有