Ruby 枚举器如何终止迭代?

2024-01-03

朋友们,我需要帮助解释一下:在下面的 Ruby 代码中,什么条件白蚁循环会做什么?它应该是一个无限循环,但是,它如何终止呢?

# Ruby code
fib = Enumerator.new do |y|
  a = b = 1
  loop do
    y << a
    a, b = b, a + b
  end
end

p fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

您的贡献将受到高度赞赏。


(来源:https://rossta.net/blog/infinite-sequences-in-ruby.html https://rossta.net/blog/infinite-sequences-in-ruby.html)

您实现该功能的方式fib让它变得“懒惰”。这意味着 Ruby 不会尝试计算中的值fib直到绝对需要为止。

The take最后一行的方法是这里的关键。

p fib.take(10) 

基本上,Ruby 说“我将评估前 10 个值fib假装其余的不存在,就像我不存在一样have to还用用它们吧。”

换句话说,虽然确实fib函数可能是无限的,您只要求前 10 个值,因此您只获得前 10 个值。

如果你尝试过这样的事情:

p fib.to_a

你的程序会卡住。为什么?因为to_a(到数组)方法想要尝试获取allfib 的值,而不仅仅是其中的几个。显然,你无法得到all无限列表的值。

了解更多信息:

https://medium.com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8a6f4410053f https://medium.com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8a6f4410053f

https://github.com/juinc/tilap/issues/9 https://github.com/juinc/tilap/issues/9

- - 编辑: - -

技术修正:正如卡里·斯沃夫兰(Cary Swaveland)指出的那样,从技术上来说,这样说会更正确fib是一种按需生成值的算法/机器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 枚举器如何终止迭代? 的相关文章

  • 无需 root 即可安装 Jekyll

    我想在共享服务器上建立一个 jekyll 博客 当我尝试安装 Jekyll 时 我收到 您没有写入权限 如何在没有 root 或 sudo 的情况下解决这个问题 更多详情 我在共享服务器上有空间 但没有 root 访问权限 我无法安装 Ru
  • Ruby - 在 tmp/pids/thin.pid 中找不到 PID (Thin::PidFileNotFound)

    我试图开始精简我的应用程序 但随后pid无法生成 thin C var www project path current config myproject testing yml start 现在我无法阻止它 因为没有 pid thin C
  • 后视模式无效

    为什么这个正则表达式在 Python 中有效 但在 Ruby 中无效
  • 从 Slack 机器人访问 Slack 文件

    我需要一个能够接收和保存从 Slack 聊天室发送的文件的 Slack 机器人 问题是 slack 不发送文件内容 而是发送指向该文件的链接数组 其中大多数 包括下载链接 都是私有的 无法通过机器人访问 它确实发送了一个公共链接 但该链接指
  • 当用户应该有权访问他拥有的交易时,Rspec 测试失败,用户被重定向

    在我的应用程序中 借助 Cancan 我允许客户访问他自己的优惠 当我用浏览器 手动 尝试时它有效但我未能实施 rspec 测试 客户无法访问其他客户的交易 只能访问他自己的交易 管理员通过 Active Admin 界面授予他访问权限 就
  • 拆分为不同的换行符

    现在我正在做一个split在字符串上并假设用户的换行符是 r n像这样 string split r n 我想做的事分为两部分 r n要不就 n 那么正则表达式将如何分割其中的任何一个呢 你试过了吗 r n The 使得 r选修的 用法示例
  • 用 Ruby 或 Python 解析 SVG 的库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVG 是一个庞大的标准 它基于 XML 我过去曾将 SVG 解析为 XML 然而 有些事情很难 例如
  • 为什么到处都有冻结常数?

    我们可以很容易地从许多著名的存储库中找到这种样式 例如机架 导轨等 例如在机架中 https github com rack rack blob 28e77c710ac2ddb35c436d78d72e28f28f964446 lib ra
  • Rails:如何自动完成名称搜索但保存 ID?

    我用过这个视频http railscasts com episodes 102 auto complete association revised http railscasts com episodes 102 auto complete
  • 如何为开发和生产指定不同版本的 gem

    我需要有不同版本的 gem 进行开发和生产 因此我将以下内容放入我的 gemfile 中 group development test do gem rspec rails 2 11 0 gem bcrypt ruby 3 1 2 end
  • 如何在 ruby​​ 中打印原始字符串?

    我要打印escaped or raw字符串的版本 例如 给定这个字符串 a b c d 我想要得到 a nb nc nd 是否可以 s a b c d s dump gt a nb nc nd s dump 1 1 gt a nb nc n
  • Ruby on Rails 安装问题 (Windows)

    我从 RuyInstaller 安装了 Ruby 2 0 0 和 DevKit 创建新项目时出现错误消息 rails new testtest d mysql a lot of output here Installing mysql2 0
  • Ruby 的所有/最佳宝石列表? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何忽略网络爬虫中的文件类型?

    我正在编写一个网络爬虫 并且想要忽略链接到二进制文件的 URL exclude w flv swf png jpg gif asx zip rar tar 7z gz jar js css dtd xsd ico raw mp3 mp4 w
  • 为什么 to_proc 在 Ruby 改进中不起作用?

    看起来to proc不适用于细化中定义的方法 module ArrayExtensions refine Array do def sum reduce 0 end end end using ArrayExtensions puts 1
  • Rails 使用驼峰命名法渲染 json 对象

    我在简单的 Rails API 中有以下控制器代码 class Api V1 AccountsController lt ApplicationController def index render json Account all end
  • 如果这段代码不是玩笑,那么它到底是如何工作的呢?

    class Tree def initialize d d d end def to s l r gt d end def total d is a Numeric d 0 email protected cdn cgi l email p
  • 在 Ruby 中,有没有办法重载初始化构造函数?

    在 Java 中你可以重载构造函数 public Person String name this name name public Person String firstName String lastName this firstName
  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用

随机推荐

  • 空类构造函数(样式)

    什么是定义不需要任何构造函数参数的类的 Pythonic 方法 class MyClass class body 或者我们需要一个显式的构造函数吗 IE class MyClass def init pass class body 您的第一
  • 视频缩略图

    我正在开发一个人们可以提交视频链接的网站 然后我就嵌入它 但是 我想获取视频的缩略图而不将视频保存在我的服务器中 这样当我列出视频时 我可以使用缩略图而不是嵌入所有视频 我的服务使用 PHP 假设视频为 SWF 格式 或标签中是否有任何内容
  • CKEditor - 无工具栏

    所以我得到了一个textarea with CKEditor插件 但我只想让它干净 没有任何东西 没有工具栏 没有状态栏或任何栏 这很简单 但我在文档或网络上找不到它 My CKEditor开始于 texto ckeditor skin o
  • 升级到 Swift 3 后,属性“self.delegate”未在 super.init 调用中初始化

    升级到 Swift 3 后 我现在收到此错误 属性 self delegate 未在 super init 调用时初始化 在 NSObject 类上定义 open class NSObject NSObjectProtocol public
  • Android Oreo WebView 在第二次加载后渲染布局太小

    在某些 Android Oreo 设备上 当我第一次在 webview 上加载 url 时 URL 页面会正确加载 但是 当我再次加载 URL 时 页面会缩小 在低于 android oreo 的设备上 页面可以为所有设备正确加载 此外 当
  • VS2008 中“<<”和“++”的运算符优先级优化

    我遇到了一个奇怪的 VS2008 C 问题 看起来运算符优先级没有得到尊重 我的问题是这个的输出是什么 int i 0 std cout lt lt i 0 Not zero zero lt lt i lt lt std endl 通常情况
  • 如何在 WordPress 主题中包含 jQuery?

    我对 WordPress 还很陌生 我正在研究如何将 jQuery 包含到主题中 我将以下函数创建为函数 php theme function load java scripts Load FlexSlider JavaScript tha
  • 在选项卡栏开关上弹出到根导航控制器时出现问题

    尝试模仿 复制内置地址簿 特别是从 电话 应用程序内部编辑联系人或查看现有联系人信息时的行为 当您导航到另一个选项卡时 编辑状态将重置 并弹出 新联系人 或 信息 视图 以便当您返回 联系人 选项卡时 您将返回到根表视图 我使用 setEd
  • 如果没有锚点,则无法使用菜单弹出帮助程序

    我想在操作栏中使用弹出菜单项 当我在活动中使用它时一切正常 但是当我切换到片段时我得到 MenuPopupHelper cannot be used without an anchor 我的片段 Override public boolea
  • Django __str__ 返回非字符串(类型 NoneType)

    我正进入 状态 str returned non string type NoneType 编辑时出错Product模型对象 产品型号 class Product models Model ProductName models CharFi
  • 无法在 Ubuntu 18.04 LTS 上安装 rstanarm

    我无法安装rstanarm on R 3 5 3运行于Ubuntu 18 04 LTS 我使用了以下命令 install packages rstanarm and devtools install github stan dev rsta
  • 如何直接从 R 控制台打开工作目录?

    我怎样才能打开我的getwd 直接从 R 控制台获取文件夹 如果我想查看我最近刚刚导出到那里的东西 这很有用 谷歌搜索没有透露任何信息 我没有能力构建一个函数 如果您确实想要一个文件浏览器 您可以创建一个函数来打开目录 根据您使用的操作系统
  • 导入错误:使用 Azure SDK 时无法导入名称会话

    我正在使用 Azure SDK 运行代码 首先 我通过下载sdkpip install azure 然后我编写运行以下 python 代码 import requests import os make sure you configure
  • Rails Basecamp 风格子域最佳实践

    我的目标是为每个子域拥有单独的用户帐户 在任何情况下 我都不想在子域之间进行异花授粉 我看过了罗比 拉塞尔 http www robbyonrails com articles 2009 01 11 subdomain accounts w
  • 从 url mysql 或 python 中提取模式编号

    我有一堆 url 其中有一个字符串 hotel 4 digit number hotel1234 or slash 4digit html 1234 html 是否有正则表达式可以使用 python 或 mysql 提取 4 位数字 例如
  • 在 AWS Lambda 上使用来自 Python 的 NodeJS 4 脚本

    问题 我有一个在 AWS Lambda 上运行的 Python 脚本 该脚本正在使用subprocess执行 NodeJS 4 脚本 我尝试过什么 subprocess check output my script js 得到非零结果 得到
  • 更改外部变量的值

    我们在 File1 c 中有 int arr 10 在 File2 c 中 extern int arr int main arr 0 10 return 0 这样做可能会出现哪些问题以及为什么 数组不是指针 内存访问将会出错 In Fil
  • 从头开始实现 cv2.warpPerspective()

    我正在使用 OpenCV 函数进行一些实验cv2 warpPerspective当我决定从头开始编码以更好地理解它的管道时 尽管我 希望 遵循了每一个理论步骤 但似乎我仍然遗漏了一些东西 并且我正在努力理解什么 请你帮助我好吗 SRC 图像
  • 谷歌应用引擎支持环境变量吗?

    我注意到开发人员控制台似乎没有公开任何可以配置静态环境变量的地方 GAE 是否期望我将这些变量捆绑为构建服务器部署的一部分 如果是这样 GAE Google Cloud 上是否有任何文档介绍了原因或详细说明了其原理 几年过去了 仍然没有 我
  • Ruby 枚举器如何终止迭代?

    朋友们 我需要帮助解释一下 在下面的 Ruby 代码中 什么条件白蚁循环会做什么 它应该是一个无限循环 但是 它如何终止呢 Ruby code fib Enumerator new do y a b 1 loop do y lt lt a