自学Tcl/tk已有半年余,近期终于完成了一个图形化的程序,用于人机交互,并实现自动化监控管理。在编写过程中,遇到了很多意想不到的困难,在此,大致记录一下,权作备忘。
先来看看eval命令的定义:
Eval是用于创造和运行脚本的通用构造。它接受任意多个参数,把它们用分隔符串接起来,然后把串接的结果作为一个脚本处理。
例如,用tcl调用一个外部程序example.exe,我们通常的做法是直接输入命令:
exec example.exe
此时解释器会直接返回外部程序的运行结果(如果有返回值的话)。
可以很容易的将返回值保存到一个变量,例如:
set a [exec example.exe]
此时变量a即是外部程序运行结果。
但是,在大多数情况下,外部程序需要接更多的参数用于控制,此时直接用exec+程序名+参数会得到解释器报错的提示。此时,有两种做法:
将程序名和参数合并写入到一个字符串Var_String, 运行exec $Var_String;但是此种做法限制了参数的变换,实际使用中不方便。除非参数本身就不会变换。
使用eval命令,将所有可能用的参数串接起来,例如:
eval exec example.exe A B C D
上述A B C D等等是可用的任意参数。也可指定变量,用$A等取出。此时就显得灵活多了。
但是,需要注意的是。Tcl编程在结合上下文时,要灵活掌握“ ”、[ ]、{ }的使用。如果使用eval命令报错,不妨检查一下是否选用了合适的括号。