Nim 中的每次迭代变量?

Per-iteration variable in Nim?

提问人:init 1 提问时间:4/20/2023 更新时间:4/20/2023 访问量:126

问:

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

for 循环 lambda 按引用传递 anonymous-function nim-lang

评论


答:

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 .capturestd/sugar