.
.
名称
eval - 调用一个Tcl脚本
语法
eval arg ?arg ...?
描述
eval带一个或多个变元,可以有一个或多个命令组成,eval采用concat命令的风格连接所有变元,执行命令并且返回执行结果(或者错误)。
示例
有的时候,把一些片断脚本连接存储起来然后再执行是很有用的,这种技术在很多Tcl内核中都有使用(比如在fcopy、lsort和trace命令的回调)。下面的命令给出了怎么去使用命令:
set script {
puts "logging now"
lappend $myCurrentLogVar
}
set myCurrentLogVar log1
# Set up a switch of logging variable part way through!
after 20000 set myCurrentLogVar log2
for {set i 0} {$i<10} {incr i} {
# Introduce a random delay
after [expr {int(5000 * rand())}]
update ;# Check for the asynch log switch
eval $script $i [clock clicks]
}
注意在很多情况下(当脚本片断实际上是一个命令的前缀),最好使用{*}$script模式。下面的过程类似于使用lappend命令,插入变元到列表的最前面。
proc lprepend {varName args} {
upvar 1 $varName var
# Ensure that the variable exists and contains a list
lappend var
# Now we insert all the arguments in one go
set var [eval [list linsert $var 0] $args]
}
最后一行可以写成:
set var [linsert $var 0 {*}$args]