如何在Tcl中使用字符串递增数组时修复预期的整数错误

  • 本文关键字:错误 整数 数组 Tcl 字符串 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 中很重要,尤其是在调用函数/方法/过程时,因为该语言不使用逗号来分隔参数,而是使用空格。

最新更新