如果您有一个枚举器和一些可调用的(proc/lambda/方法),有时组合它们来创建一个新的枚举器是很方便的,如下所示

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::<<个很接近但不太正确的文档.

推荐答案

听起来像是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 }

Ruby相关问答推荐

在 ruby​​ 中提取文档中的主题标签和部分

使用 Ruby,是否可以将 BigDecimal("1") / BigDecimal("3") 打印为 0.3333333333333... 到任意长度?

如何使用 Ruby 删除字符串中某个字符后的子字符串?

Ruby 中有内置的二进制搜索吗?

如何记录在 Ruby 程序中调用的每个方法?

在 Ruby 早期转义 .each { } 迭代

查明 IP 是否在 IP 范围内

CSV.read 第 x 行的非法引用

如何将消息附加到 RSpec 判断?

从 Ruby 程序中创建 beep声的最简单方法是什么?

Ruby 中的 -> (stab) 运算符是什么?

如何仅从 Gemfile 中查看依赖关系树?

Sinatra 是多线程的吗?

理解 Ruby 中的私有方法

如何设置方法测试中使用的私有实例变量?

什么是 Rakefile?

Ruby 实例变量何时设置?

使用哈希值呈现 ERB 模板

Ruby:使用 ENV 变量(如果存在)的最简洁方法,否则使用默认值

如何删除已安装的 ri 和 rdoc?