我有这个简单的代码来生成一个惰性数组:
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.new
或include Enumerable
,因为它需要更多参数,因此无效。
我如何在Rubinius中执行上述示例?有没有办法让代码在官方和Rubinius中都有效?
答案 0 :(得分:3)
你在1.8模式下使用Rubinius,它在全局命名空间中没有Enumerator。请在1.9模式下使用Rubinius,然后示例工作正常。你可以在启动Rubinius时通过-X19使用1.9,或者设置RBXOPT = -X19。
在编译期间,也可以使用configure将1.9模式设为默认值。
答案 1 :(得分:1)
听起来像Rubinius中的错误/缺课。在github上打开一个问题,它会被添加。或者深入挖掘并发送拉动请求!