我认为无限枚举器对于编写FP样式脚本非常方便,但我还没有找到一种在Ruby中构造这种结构的舒适方法.
我知道我可以明确地构建它:
a = Enumerator.new do |y|
i = 0
loop do
y << i += 1
end
end
a.next #=> 1
a.next #=> 2
a.next #=> 3
...
Run Code Online (Sandbox Code Playgroud)
但这对于这样一个简单的结构来说很烦人.
另一种方法是使用的"黑客" Float::INFINITY:
b = (1..Float::INFINITY).each
b = (1..1.0/0.0).each
Run Code Online (Sandbox Code Playgroud)
这两个可能是我能给出的最笨拙的解决方案.虽然我想知道是否还有其他更优雅的方法来构建无限的枚举器.(顺便说一句,为什么Ruby不能制作inf或infinity作为文字Float::INFINITY?)
使用#to_enum或#lazy将Range转换为Enumerable。例如:
(1..Float::INFINITY).to_enum
(1..Float::INFINITY).lazy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |