Nim 中的迭代器生成函数:在分配迭代器时起作用,在直接调用它时卡住

2024-04-08

我尝试创建一个创建迭代器的过程,如下所示:

proc makeCDFrom(start: int): iterator(): int =
  result = iterator(): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

let cdFrom6 = makeCDFrom(6)
for j in cdFrom6():
  echo "j:", j

这似乎按预期工作:

i:6
j:6
i:5
j:5
i:4
j:4
i:3
j:3
i:2
j:2
i:1
j:1
i:0
j:0

然而,最初,我尝试过这种细微的变化:

proc makeCDFrom(start: int): iterator(): int =
  result = iterator(): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

# Note the direct call:
for j in makeCDFrom(6)():
  echo "j:", j

当我尝试运行上面的内容时https://play.nim-lang.org/ https://play.nim-lang.org/,它似乎被卡住了。什么都没有显示。

为什么会有这样的差异?


Why?

因为有一个错误。

你能为这个做什么?

向 github.com/nim-lang/Nim 报告错误

同时使用

let myClosureIter = makeCDFrom(6)

或者在没有工厂的情况下定义迭代器:

iterator makeCDFrom(start: int): int =
    var
      i: int = start
    while i >= 0:
      echo "i:", i
      yield(i)
      dec(i)

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

Nim 中的迭代器生成函数:在分配迭代器时起作用,在直接调用它时卡住 的相关文章

  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • 调用擦除()后 std::map::iterator 出现问题

    erasing from map include
  • C++ std::vector 搜索值

    我正在尝试优化std vector 搜索 基于索引的迭代向量并返回与 搜索 条件匹配的元素 struct myObj int id char value std vector
  • const_iterators 更快吗?

    我们的编码指南更喜欢const iterator 因为它们比正常的要快一点iterator 当您使用时 编译器似乎会优化代码const iterator 这真的正确吗 如果是的话 内部到底发生了什么使得const iterator快点 编辑
  • 在 Mule 3.4 中模拟 while 循环

    我需要在 Mule Flow 中使用 while 循环来从自定义 DAO 中加载数据块 我使用表达式转换器来访问 DAO 直到他不再提供任何项目 我不知道 DAO 提供的项目总量 Mule 3 4 中没有内置 while 循环 我的第一个想
  • 采用迭代器而不是可迭代的方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 关于迭代器和可迭代对象 仅是我的观察 如果我错了 请纠正我 大多数构造函数 数组类型 将迭代器作为质量构造函数 迭代器是显式创建的 或
  • 向前和向后迭代

    我们有一个双端结构列表 例如LinkedList 我需要向前和向后迭代元素 例如 向前 4 次 然后向后 2 次 然后向前 5 次 在 C 中它将是 iter iter iter 在 Rust 中 我只看到 next and rev 这很不
  • STL列表迭代器不会更新我的对象

    我使用列表迭代器将宠物的所有年龄设置为 1 但更改不会在 for 循环之外持续存在 include
  • PHP - While/Else 错误? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下
  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 使用 STL 算法与容器(char * 除外)进行 C++ 二进制文件 I/O

    我正在尝试使用 STL 复制算法对二进制文件 I O 进行简单测试 以将数据复制到容器和二进制文件中 从容器和二进制文件中复制数据 见下文 1 include
  • Dart 中的 DoubleLinkedQueue 和 ListQueue 有什么区别?

    Dart 核心 API 有两个类实现Queue
  • 如何实现 Iterable 接口?

    给定以下代码 如何迭代 ProfileCollection 类型的对象 public class ProfileCollection implements Iterable private ArrayList
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • 有条件地从 flat_map 返回空迭代器

    鉴于这个定义foo let foo vec vec 1 2 3 vec 4 5 6 vec 7 8 9 我希望能够编写这样的代码 let result Vec lt gt foo iter enumerate flat map i row
  • 迭代非增量枚举

    在你问之前 我已经looked https stackoverflow com questions 261963 c iterate through an enum and looked https stackoverflow com qu
  • 空 while 循环有什么影响?

    我知道这可能是一个有点 愚蠢 的问题 但有时 我只想循环直到条件为假 但我不喜欢让循环保持为空 所以代替 Visible true while IsRunning Visible false 我通常prefer while IsRunnin
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 是否有用于 C 字符串的标准 C++ 迭代器?

    有时我需要使用通用 C 迭代器范围接口将 C 字符串传递给函数 first last 是否有针对这些情况的标准 C 迭代器类 或者无需复制字符串或调用的标准方法strlen 编辑 我知道我可以使用指针作为迭代器 但我必须知道字符串在哪里结束
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include

随机推荐

  • hsqldb Oracle 模式选择立即更新

    Oracle语法中的HSQLDB似乎不支持NOWAIT HSQLDB版本 2 3 3 with SET DATABASE SQL SYNTAX ORA TRUE SQL 产生异常 select a b c from sometable wh
  • 动态更改 UITableView 的内容

    我有一个 NSURL 对象 它根据用户在搜索栏中输入的变量从我的网站获取数据 我将这些数据拆分为 NSArray 完成后 我希望在 UITableView 中显示数据 我的问题是这样的 是否可以将数据动态加载到 UITableView 中
  • Orbeon 4.5 - 如何传递请求参数?

    我们正在从 Orbeon 3 9 升级到 4 5 在 Orbeon 3 9 中 我们将请求参数传递给发送成功 URI oxf fr detail send success uri 当用户单击自定义提交按钮时 我们通过修改来做到这一点pers
  • 对资源管理器中选定的文件执行 PowerShell 命令

    如何在 PowerShell 中仅对资源管理器中选定的文件执行重命名命令 我有 PS 命令 但我不知道将其放在 Windows 注册表中的何处 以便可以在资源管理器的右键单击上下文菜单中访问 HKCR shell 包含您需要的内容 使用您想
  • 将静态数据(不随时间变化)添加到 LSTM 中的序列数据

    我正在尝试建立一个如下图所示的模型 请看下图 我想在 LSTM 层中传递序列数据 在另一个前馈神经网络层中传递静态数据 血型 性别 后来我想将它们合并 然而 我对这里的维度感到困惑 如果我的理解是正确的 如图所示 5维序列数据如何与4维静态
  • 提取 Zip 内的目录

    我正在编写一个脚本 将 zip 存档中的文件提取到该脚本所在的目录中 这是我的代码 zip new ZipArchive if zip gt open latest zip TRUE zip gt extractTo zip gt clos
  • Web 服务器内置 Azure 应用服务

    背景 我正在托管一个静态 Web 应用程序 由 NUXTJS 在 Azure 应用服务上生成 现在我想通过以下方式配置更多内容web config比如为多个域设置 CORS 设置 但我找不到任何文档来确定 Azure 应用程序服务中集成 安
  • VB.NET 和 COM Interop 看似随机崩溃

    我正在考虑用 VB 6 重写一个全新的 VB NET 应用程序 该应用程序在终端服务下运行并大量使用 COM 由于某种原因 该应用程序存在随机奇怪之处 随机访问冲突错误 WinDbg 异常分析指向 dll 如 comdlg32 dll ms
  • Bigquery 如果字段存在

    简而言之 有没有办法在不存在的 BQ 字段中进行查询 并接收这些字段的 null 值 我有几乎同样的问题BigQuery IF 字段存在 THEN https stackoverflow com questions 32276601 big
  • PL/SQL 游标 for 循环

    我相信我需要一个循环游标来浏览表 test data 中的 street1 列 我有一个程序需要测试表中的每一行 这是我到目前为止所拥有的 cursor c1 is street1 from test data Begin If Instr
  • 如何调用Parent重写方法

    我有两个类 Parent 和 Child 从 Child 类 我调用父类重写方法 show 从父类 我调用另一个方法 display 但由于调用了 Child 方法 该方法也被重写 我想从show方法调用Parent方法display pu
  • jQuery - 翻转时更改另一个图像的 src

    我想知道是否有人可以帮助我 我有 2 张图像 如果有意义的话 我希望能够在翻转另一张图像时更改其中一张图像的 src 例如 我有 2 张图片 当有人将鼠标悬停在 imimage2 jpg 上时 我希望 imimage1 jpg 更改为 im
  • 我如何将长文本视图(字符串)显示到android的多个页面中

    我正在开发一个看起来像电子书阅读器 text pdf 文件等 的应用程序 我有一个巨大的文本 分为不同的章节或页面 现在的问题是如何将整个内容分成若干页并一页一页地显示 我怎么知道屏幕适合的字符数 取决于屏幕尺寸和字体大小 我完全不知道从哪
  • Javascript 加载、就绪、domready、DOMContentLoaded 事件

    我有点迷失在 启动 事件 有很多不同的事件 并且在 DOM 和各种框架 如 jQuery 中以不同的方式命名 所有可能的启动事件有哪些 它们有何不同 您能否显示一个简单的时间线来演示这些事件的触发顺序 ready JavaScript 提供
  • 逻辑运算的快捷方式

    我只是想知道 逻辑运算符 就像如果我想做类似的事情i i 10 我可以i 10 我搜索这个的原因是因为我有一个验证函数 它分为几个函数 以下是模拟 function f1 return Math ceil Math random 10 2
  • React JS 中适合父容器的多行文本

    我正在使用 Flexbox 布局 并尝试调整特定 div 中的文本大小以适合该 div 例如 如果我有如下代码 div div A really really really really long phrase here that will
  • 请注意,文档的某些部分可能包含文档检查器无法删除的个人信息

    I use Excel 2013 and Power View and SQL Server 2008 R2 创建我的后Data Source and my chart in Excel当我想要保存 Excel 文件时 我收到此消息 be
  • Elm - 检查值的类型

    是否存在检查 Elm 中变量类型的函数 例如 重复 numberTwo 2 returnType numberTwo number String 这样做的动机是当你使用Signal map n 通常会出现这样的情况 并非所有要应用的函数的参
  • 从外部访问 Leaflet.js GeoJson 功能

    我想从外部与传单驱动的地图的 GeoJson 覆盖层 多边形 进行交互L 的领域 但我似乎无法访问由L 互动包括 获取边界 我的特征 fitBounds 我的特征 设置样式 ETC 我可以看到 Leaflet 暴露了 L GeoJSON g
  • Nim 中的迭代器生成函数:在分配迭代器时起作用,在直接调用它时卡住

    我尝试创建一个创建迭代器的过程 如下所示 proc makeCDFrom start int iterator int result iterator int var i int start while i gt 0 echo i i yi