TCL.如何检查程序是否存在?

vas*_*111 1 tcl

我需要检查,如果程序func1存在和结果(如果存在,1如果不0投入)variable proc_ststus_var.我该怎么做?

And*_*ein 7

info procs ?pattern? 将为您提供您想要的基本构建块:

% proc foo {} {}
% info procs foo
foo
% info procs bar
% 
Run Code Online (Sandbox Code Playgroud)

就像是:

% proc procExists p {
   return uplevel 1 [expr {[llength [info procs $p]] > 0}]
}
% procExists foo
1
% procExists bar
0
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在过程中运行`info procs`可能会更改上下文命名空间; 图书馆质量代码将使用; `uplevel 1 [list info procs $ p]`而不是. (2认同)

Joh*_*uhn 6

请注意,如果您检查具有某些元字符 ( *, ?) 的过程是否存在,则info commands可能会返回错误的结果。

因此,要检查过程是否存在,请使用namespace which或检查以下结果info commands

if {[llength [namespace which $cmdname]]} {
    ...
}
if {$cmdname in [info commands $cmdname]} {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Tclunknown使用了这种namespace which方法。