使用Ruby方法组合枚举器和函数

ajsxfq5m  于 2023-02-12  发布在  Ruby
关注(0)|答案(1)|浏览(99)

如果你有一个枚举器和一些可调用的(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::〈〈,它们很接近,但不太正确。

ozxc1zmp

ozxc1zmp1#

听起来像Enumerable#map

(0..10).each.map { |x| x * 2 }

实际上,您甚至不需要each,因为map是混合在Enumerable中的任何对象的方法。

(0..10).map { |x| x * 2 }

如果你想得到一个惰性枚举器,你可以在应用任何转换之前调用Enumerable#lazy,这将返回一个对象,所有的Enumerable方法都可以惰性地应用于该对象。

(0..10).lazy.map { |x| x * 2 }

相关问题