如何修复Tcl中使用字符串递增数组时出现的预期整数错误
这是一个Tcl代码,它试图将项添加到命名空间内的数组中如何修复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 [ls
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)
尝试将变量条目增加($item)
从代码的其他部分可以明显看出,entries
是一个数组,因此entries
本身不能递增,因此我得出结论,您实际上是想:
incr entries($item)
它尝试将变量条目($item)
增加1(默认增量为incr
)
在tcl中,空格非常重要,尤其是在调用函数/方法/过程时,因为该语言不使用逗号分隔参数,而是使用空格。在incr entries($item)
中有一个附加空格字符,应该是incr entries($item)
谢谢。看来我需要更好地了解Tcl