如何修复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

这是一个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)
尝试将变量
条目增加
($item)

从代码的其他部分可以明显看出,
entries
是一个数组,因此
entries
本身不能递增,因此我得出结论,您实际上是想:

incr entries($item)
它尝试将变量
条目($item)
增加1(默认增量为
incr


在tcl中,空格非常重要,尤其是在调用函数/方法/过程时,因为该语言不使用逗号分隔参数,而是使用空格。

incr entries($item)
中有一个附加空格字符,应该是
incr entries($item)
谢谢。看来我需要更好地了解Tcl