gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:50 25 4
gpt4 key购买 nike

在 Ruby 2.4 和整数范围中,Range(Enumerable)#sumoptimized直接返回结果,无需遍历所有元素。

不明白为什么要在enum.c中定义相应的代码对于 Enumerable模块而不是 range.c对于Range类。

为什么 Enumerable 应该知道包含它的类(例如 RangeHash ...)并检查它们的类型而不是让这些类覆盖Enumerable#sum

见于 enum.c :

 return int_range_sum(beg, end, excl, memo.v);
# or
hash_sum(obj, &memo);

最佳答案

因为 rb_range_values对于任意类实例(不仅是明确的 Range)可能是 true,我们都希望它们也被优化。

基本上,这意味着一旦一个实例响应了 begin and end (和 exclude_end? 顺便说一句,)我们要进入这个优化。

关于ruby - 为什么在 Enumerable 模块中定义 Range#sum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com