Tcl中的info exist命令返回错误

时间:2018-10-09 08:16:55

标签: tcl

我在itcl中编写了以下代码

if {[info exists ::xtg::triggers::match$arg]} {
    eval delete object ::xtg::triggers::match$arg 
}

此代码应检查是否存在名称为:: xtg :: triggers :: match $ arg的对象,如果存在则将其删除。 问题是我的shell中出现以下错误: “命令” match0“已存在于名称空间” :: xtg :: Triggers“” 而不是info手册中写的1或0存在命令。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

info exists检查现有变量,而不检查命令(包括对象命令)。

尝试:

if {[info commands ::xtg::triggers::match$arg] ne ""} {
     # ...
}

您可能还需要考虑Itcl的info objects

if {::xtg::triggers::match$arg in [info objects]} {
     # ...
}

if {[info objects ::xtg::triggers::match$arg] ne ""} {
     # ...
}

(假设您为正确的命名空间范围调用[info objects]