【发布时间】:2014-04-14 12:55:13
【问题描述】:
我需要检查过程 func1 是否存在并将结果(如果存在 1 如果不存在 0)放入 variable proc_ststus_var 。我该怎么做?
【问题讨论】:
标签: tcl
我需要检查过程 func1 是否存在并将结果(如果存在 1 如果不存在 0)放入 variable proc_ststus_var 。我该怎么做?
【问题讨论】:
标签: tcl
info procs ?pattern? 将为您提供所需的基本构建块:
% proc foo {} {}
% info procs foo
foo
% info procs bar
%
类似:
% proc procExists p {
return uplevel 1 [expr {[llength [info procs $p]] > 0}]
}
% procExists foo
1
% procExists bar
0
【讨论】:
procExists fo* 将返回 true。如果您不希望出现这种行为,请在info procs 直接返回的列表中查找确切名称。
info procs 可能会更改上下文命名空间;库质量代码将使用; uplevel 1 [list info procs $p] 代替。
info procs 可能有副作用?有没有这样的例子?
uplevel 1。
请注意,如果您检查是否存在具有某些元字符(*、?)的过程,info commands 可能会返回错误的结果。
所以要检查过程是否存在,请使用namespace which 或检查info commands 的结果:
if {[llength [namespace which $cmdname]]} {
...
}
if {$cmdname in [info commands $cmdname]} {
...
}
Tcl 的unknown 使用namespace which 方法。
【讨论】:
你可以试试
set commandExists [ info commands "mycommandname" ];
【讨论】:
info commands 检查命令,而不是过程(实际上是命令的子类)。它还返回命令名称列表,而不是布尔值……