gpt4 book ai didi

nim-lang - Nim 语言中的倒数和倒数迭代器可以在变量声明中使用吗?

转载 作者:行者123 更新时间:2023-12-03 06:35:03 25 4
gpt4 key购买 nike

我正在尝试学习 Nim 及其特性,例如迭代器;我发现下面的例子运行良好。

for i in countup(1,10):   # Or its equivalent 'for i in 1..10:' 
echo($i)

但是,以下方法不起作用:

var 
counter = countup(1,10) # THIS DO NOT WORK !
# counter = 1..10 # This works

for i in counter :
echo($i)

Nim 编译器报告以下错误:

Error: attempting to call undeclared routine: 'countup'

countup 如何是未声明的例程,它是一个内置迭代器!?

或者这是一个需要报告的错误?

在变量声明中强制使用自定义迭代器(例如计数或倒计时)的解决方案有哪些?

注意:我在 Windows 平台上使用 Nim 0.13.0。

最佳答案

发生这种情况是因为 countup 只是一个内联迭代器。 .. 有一个定义作为内联迭代器以及 Slice:

内联迭代器是零成本抽象。相反,您可以通过将内联迭代器转换为一个来使用一流的闭包迭代器:

template toClosure*(i): auto =
## Wrap an inline iterator in a first-class closure iterator.
iterator j: type(i) {.closure.} =
for x in i:
yield x
j

var counter = toClosure(countup(1,10))

for i in counter():
echo i

关于nim-lang - Nim 语言中的倒数和倒数迭代器可以在变量声明中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35697386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com