提问人:init 1 提问时间:4/20/2023 更新时间:4/20/2023 访问量:126
Nim 中的每次迭代变量?
Per-iteration variable in Nim?
问:
var functions: seq[proc(): int] = @[]
functions.add(proc(): int = 233)
for i in 1 .. 5:
functions.add(proc(): int = i)
for i in 1 .. 5:
echo functions[i]()
输出
5
5
5
5
5
似乎 Nim 通过引用在这些匿名函数中存储自由变量,而不是像 Python、Ruby 和 Groovy 那样的值。我怎样才能得到它的值而不是引用?i
答:
1赞
Optimon
4/20/2023
#1
您可以使用捕获宏,请参阅 std/sugar
中的文档
import std/sugar
var functions: seq[proc(): int] = @[]
for i in 1 .. 5:
capture i:
functions.add(proc(): int = i)
for fn in functions:
echo fn()
系统中还有 captureScope(系统模块总是隐式导入的),但文档建议使用 from .capture
std/sugar
下一个:C 中的新运算符返回值#
评论