You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中组合Enumerator与可调用对象:是否有内置方法或简洁语法?

Ruby Enumerator与可调用对象组合的内置方案

Ruby标准库中没有直接实现你所描述的compose功能的内置方法,但有更简洁的语法可以达到相同效果:

1. 惰性转换(推荐,保持Enumerator特性)

使用Enumerator#lazy结合map方法,能生成惰性的LazyEnumerator(继承自Enumerator),仅在需要取值时才执行转换逻辑,和你自定义的compose方法行为完全一致:

# 生成0,2,4,6...的惰性Enumerator
(0..10).lazy.map { |x| x * 2 }

如果你的可调用对象是独立的proc/lambda,也可以直接传入:

double = proc { |x| x * 2 }
(0..10).lazy.map(&double)

2. 非惰性转换(适用于无需延迟求值的场景)

如果不需要惰性特性,可以先通过map生成转换后的数组,再转为Enumerator:

double = proc { |x| x * 2 }
(0..10).map(&double).each

注意这种方式会立即遍历原Enumerator生成完整数组,再转为新的Enumerator,性能上不如惰性版本。

你提到的Enumerator::+用于拼接两个Enumerator的元素序列,Proc::<<用于组合多个Proc(将前一个Proc的输出作为后一个的输入),确实和你需求的“将Enumerator每个元素通过可调用对象转换生成新Enumerator”不匹配。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:55:19