.
.
在tcl/tk脚本编写过程当中,不可避免的遇到不停的使用一些重复的命令,有的时候使用循环可以很好的解决,但是有的时候脚本当中有多处需要重复的代码,而且重复的时候并没有什么规律,这时候再使用循环来解决就会造成代码比较难写,而且写成的代码由于判断和循环太多而造成阅读维护上的麻烦。这里介绍一种类似于宏过程的一种方法来解决这种问题。
1、使用eval
假设需要重复的三块命令分别赋值到三个变量当中,例如
set cmd1 { puts "This is command 1"
puts "Next is command 2"}
注意使用花括号把需要重复的命令括起来。类似的定义另外两个变量cmd2和cmd3。当需要使用这些重复代码时直接使用eval cmd就可以了。
2、使用过程
配置一个没有参数的过程,例如
proc cmd {} {
puts “This is command”
}
函数体内可以做很多命令的处理,使用时调用cmd即可。
两种方法各有优劣,在选择上面可以灵活使用。
当在重复的脚本当中需要大量使用当前的一些变量时,eval就具有一定的优势,并不需要进行特殊的定义就可以直接使用定义的各种变量。如果在过程当中需要使用各种变量,要么使用参数传进过程,要么把变量声明成global。
eval还有其优点,当需要传入参数时可能eval和过程之间优势并不明显。但是如果命令的结果会改变很多参数时,eval命令的优势就体现出来。如果需要修改多个变量,使用过程的返回值就需要返回一个列表,返回后又需要重新处理,那么维护起来也更加麻烦。eval命令就可以直接set变量,无论变量是否存在。