加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Ruby中表达无限枚举器`(1..Inf)`的常见快速方法是什么?

发布时间:2020-12-16 21:04:11 所属栏目:百科 来源:网络整理
导读:我认为无限枚举器对于编写FP样式脚本非常方便,但我还没有找到一种在 Ruby中构造这种结构的舒适方法. 我知道我可以明确地构建它: a = Enumerator.new do |y| i = 0 loop do y i += 1 endenda.next #= 1a.next #= 2a.next #= 3... 但这对于这样一个简单的结构
我认为无限枚举器对于编写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
...

但这对于这样一个简单的结构来说很烦人.

另一种方法是使用Float :: INFINITY的“hack”:

b = (1..Float::INFINITY).each
b = (1..1.0/0.0).each

这两个可能是我能给出的最笨拙的解决方案.虽然我想知道是否还有其他更优雅的方法来构建无限的枚举器. (顺便说一下,为什么Ruby不能将inf或infinity作为Float :: INFINITY的文字?)

解决方法

使用 #to_enum或 #lazy将 Range转换为 Enumerable.例如:
(1..Float::INFINITY).to_enum
(1..Float::INFINITY).lazy

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读