我在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存在命令。
如何解决此问题?
答案 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]
)