在 Nim 中将表作为参数传递

Passing tables as parameters in Nim

希望这是一个简单的问题。我一直在研究 Nim,并意识到我需要传递一个 table(字典、地图、其他一些语言),但我似乎做不到找出在 doStuff()

中声明它的语法
import tables

proc doStuff(n:int, t:[int, int]) =   # How should I declare 't' here?
    if n == 0:
        return
    t[n] = (n * 10) 
    echo "length of t = " & ($len(t))
    doStuff(n+1, t)
    
proc main() =
    var tbl = initTable[int, int]()
    echo "length of tbl = " & ($len(tbl))
    tbl[0] = 0
    doStuff(5, tbl)
    echo "length of tbl = " & ($len(tbl))
    
main()

以上内容让我明白了Error: type expected, but got: [int, int]

对不起,如果这是基本的,但我的谷歌搜索还没有给我答案

多次 TIA

你差不多明白了,它应该是这样的:

import tables

proc doStuff(n: int, t: var Table[int, int]) =
    if n == 0:
        return
    t[n] = n * 10
    echo "length of t = " & $len(t)
    doStuff(n + 1, t)
    
proc main() =
    var tbl = initTable[int, int]()
    echo "length of tbl = " & $len(tbl)
    tbl[0] = 0
    doStuff(5, tbl)
    echo "length of tbl = " & $len(tbl)
    
main()

你必须使用 var Table[int, int] 而不是 Table[int, int] 因为你正在递归地改变 tbl 变量,所以你需要通过引用而不是通过值传递。