在 Tcl 中使用字符串递增数组时如何修复预期的整数错误
How to fix expected integer Error when increment array with a string in Tcl
这是一个 Tcl 代码,它试图将项目添加到命名空间内的数组
namespace eval catalog {
variable entries
array set entries {}
proc add {item} {
variable entries
incr entries ($item)
}
proc getEntries {} {
variable entries
return [lsort [array names entries]]
}
proc countInstances {item} {
variable entries
return $entries($item)
}
}
catalog::add apple
当我添加使用 catalog::add apple 和 运行 脚本时,这是我得到的错误:
expected integer but got "(1)"
(reading increment)
invoked from within
"incr entries ($item)"
(procedure "catalog::add" line 3)
invoked from within
"catalog::add 1"
(file "procex.tcl" line 19)
问题当然是我该如何解决,我做错了什么
正如错误所说。 (1)
不是整数而是字符串。
incr entries ($item)
尝试将变量 entries
递增 ($item)
。
从代码的其他部分可以看出,entries
是一个数组,所以entries
本身不能递增,由此我得出结论,你实际上是想做:
incr entries($item)
尝试将变量 entries($item)
递增 1(incr
的默认递增量)。
空格在 tcl 中很重要,尤其是在调用 functions/methods/procs 时,因为该语言不使用逗号分隔参数,而是使用空格。
这是一个 Tcl 代码,它试图将项目添加到命名空间内的数组
namespace eval catalog {
variable entries
array set entries {}
proc add {item} {
variable entries
incr entries ($item)
}
proc getEntries {} {
variable entries
return [lsort [array names entries]]
}
proc countInstances {item} {
variable entries
return $entries($item)
}
}
catalog::add apple
当我添加使用 catalog::add apple 和 运行 脚本时,这是我得到的错误:
expected integer but got "(1)"
(reading increment)
invoked from within
"incr entries ($item)"
(procedure "catalog::add" line 3)
invoked from within
"catalog::add 1"
(file "procex.tcl" line 19)
问题当然是我该如何解决,我做错了什么
正如错误所说。 (1)
不是整数而是字符串。
incr entries ($item)
尝试将变量 entries
递增 ($item)
。
从代码的其他部分可以看出,entries
是一个数组,所以entries
本身不能递增,由此我得出结论,你实际上是想做:
incr entries($item)
尝试将变量 entries($item)
递增 1(incr
的默认递增量)。
空格在 tcl 中很重要,尤其是在调用 functions/methods/procs 时,因为该语言不使用逗号分隔参数,而是使用空格。