Rubinius:如何生成枚举器作为官方方式?

时间:2012-04-15 17:13:48

标签: ruby rubinius

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

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中,它会给出错误并告诉我找不到枚举器常数。

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

我尝试将Enumerator.new更改为Enumerable::Enumerator.newinclude Enumerable,因为它需要更多参数,因此无效。

我如何在Rubinius中执行上述示例?有没有办法让代码在官方和Rubinius中都有效?

2 个答案:

答案 0 :(得分:3)

你在1.8模式下使用Rubinius,它在全局命名空间中没有Enumerator。请在1.9模式下使用Rubinius,然后示例工作正常。你可以在启动Rubinius时通过-X19使用1.9,或者设置RBXOPT = -X19。

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

答案 1 :(得分:1)

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