如果你有一个枚举器和一些可调用的(proc/lambda/method),有时候把它们组合起来创建一个新的枚举器会很方便,就像这样
class Enumerator
def compose func
Enumerator.new do |yielder|
each { |x| yielder << func[x] }
end
end
end
# make an enumerator that yields 0, 2, 4, 6...
(0..10).each.compose(proc { |x| x * 2 })
有没有内置的方法来做这件事?或者没有更简单的语法?我一直在搜索文档,因为我们有Enumerator::+和Proc::〈〈,它们很接近,但不太正确。
1条答案
按热度按时间ozxc1zmp1#
听起来像
Enumerable#map
实际上,您甚至不需要
each
,因为map
是混合在Enumerable
中的任何对象的方法。如果你想得到一个惰性枚举器,你可以在应用任何转换之前调用
Enumerable#lazy
,这将返回一个对象,所有的Enumerable
方法都可以惰性地应用于该对象。