在 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 时,因为该语言不使用逗号分隔参数,而是使用空格。