info
命令
info
命令提供了查看 TCL 解释器信息的手段, 它有超过一打的选项, 详细说明请参考下面几节.
11.2.1 变量信息
info
命令的几个选项提供了查看变量信息的手段.
-
info exists varName
: 如果名为varName
的变量在当前上下文(作为全局或局部变量)存在, 返回 1, 否则返回 0. -
info globals ?pattern?
: 如果没有pattern
参数, 那么返回包含所有全局变量名字的一个 list. 如果有pattern
参数, 就只返回那些和pattern
匹配的全局变量(匹配的方式和string match
相同). -
info locals ?pattern?
: 如果没有pattern
参数, 那么返回包含所有局部变量(包括当前过程的参数)名字的一个 list,global
和upvar
命令定义的变量将不返回. 如果有pattern
参数, 就只返回那些和pattern
匹配的局部变量(匹配的方式和string match
相同). -
info vars ?pattern?
: 如果没有pattern
参数, 那么返回包括局部变量和可见的全局变量的名字的一个 list. 如果有pattern
参数, 就只返回和模式pattern
匹配的局部变量和可见全局变量. 模式中可以用namespace
来限定范围, 如:foo::option*
, 就只返回namespace
中和option*
匹配的局部和全局变量. (注: tcl80 以后引入了namespace
概念, 不过我们一般编写较小的 TCL 程序, 可以对namespace
不予理睬, 用兴趣的话可以查找相关资料.)
下面针对上述命令举例, 假设存在全局变量global1
和global2
, 并且有下列的过程存在:
proc test {arg1 arg2} {
global global1
set local1 1
set local2 2
...
}
然后在过程中执行下列命令:
% info vars
global1 arg1 arg2 local2 local1 //global2 不可见
% info globals
global2 global1
% info locals
arg1 arg2 local2 local1
% info vars *al*
global1 local2 local1
11.2.2 过程信息
info
命令的另外的一些选项可以查看过程信息.
-
info procs ?pattern?
: 如果没有pattern
参数, 命令返回当前namespace
中定义的所有过程的名字. 如果有pattern
参数, 就只返回那些和pattern
匹配的过程的名字(匹配的方式和string match
相同). -
info body procname
: 返回过程procname
的过程体.procname
必须是一个 TCL 过程. -
info args procname
: 返回包含过程procname
的所有参数的名字的一个 list.procname
必须是一个 TCL 过程. -
info default procname arg varname
:procname
必须是一个 TCL 过程,arg
必须是这个过程的一个变量. 如果arg
没有缺省值, 命令返回 0; 否则返回 1, 并且把arg
的缺省值赋给变量varname
. -
info level ?number?
: 如果没有number
参数, 这个命令返回当前过程在调用栈的位置. 如果有number
参数, 那么返回的是包含在调用栈的位置为number
的过程的过程名及其参数的一个 list.
下面针对上述命令举例:
proc maybeprint {a b {c 24}} {
if {$a<$b} {
puts stdout "c is $c"
}
}
% info body maybeprint
if {$a<$b} {
puts stdout "c is $c"
}
% info args maybeprint
a b c
% info default maybeprint a x
0
% info default maybeprint a c
1
%set x
24
下面的过程打印出了当前的调用栈, 并显示了每一个活动过程名字和参数:
proc printStack{} {
set level [info level]
for {set i 1} {$i<$level} {incr i} {
puts "Level $i:[info level $i]"
}
}
11.2.3 命令信息
info
命令的另外选项可以查看命令信息.
-
info commands ?pattern?
: 如果没有参数pattern
, 这个命令返回包含当前namspace
中所有固有, 扩展命令以及以proc
命令定义的过程在内的所有命令的名字的一个 list.pattern
参数的含义和info procs
一样. -
info cmdcount
: 返回了一个十进制字符串, 表明多少个命令曾在解释器中执行过. -
info complete command
: 如果命令command
是完整的, 那么返回 1, 否则返回 0. 这里判断命令是否完整仅判断引号, 括号和花括号是否配套. -
info script
: 如果当前有脚本文件正在 Tcl 解释器中执行, 则返回最内层处于激活状态的脚本文件名; 否则将返回一个空的字符串.
11.2.4 TCL 的版本和库
-
info tclversion
: 返回为 Tcl 解释器返回的版本号, 形式为major.minor
, 例如8.3
. -
info library
: 返回 Tcl 库目录的完全路径. 这个目录用于保存 Tcl 所使用的标准脚本, TCL 在初始化时会执行这个目录下的脚本.