在 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
变量,所以你需要通过引用而不是通过值传递。
希望这是一个简单的问题。我一直在研究 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
变量,所以你需要通过引用而不是通过值传递。