3

我有这个简单的代码来生成一个惰性数组:

lazy_arr = Enumerator.new { |y|
    i = 1
    loop {
        y << i
        i+=1
    }
}
p lazy_arr.take(5)

在官方 Ruby 1.9.3 中,输出是[1,2,3,4,5],这就是我想要的。

但是在 Rubinius 中,它给出了错误并告诉我找不到 Enumerator 常量。

所以我查了一下,发现 Enumerator 定义在Enumerablemodule 而不是kernel,当它生成时,它需要括号中的几个参数: http ://rubydoc.info/github/evanphx/rubinius/master/Enumerable/Enumerator

我试图更改Enumerator.newEnumerable::Enumerator.new, or include Enumerable, 都不起作用,因为它需要更多参数。

如何在 Rubinius 中执行上述示例?有什么办法可以让代码在官方和 Rubinius 中都能正常工作?

4

2 回答 2

3

您在 1.8 模式下使用 Rubinius,它在全局命名空间中没有 Enumerator。请在 1.9 模式下使用 Rubinius,然后示例运行良好。您可以通过在启动 Rubinius 时传递 -X19 或设置 RBXOPT=-X19 来使用 1.9。

也可以在编译期间使用 configure 将 1.9 模式设为默认模式。

于 2012-04-15T20:48:46.743 回答
1

听起来像 Rubinius 中的错误/缺失课程。在 github 上打开一个问题,它将被添加。或者深入挖掘并发送拉取请求!

于 2012-04-15T20:10:47.097 回答