Tcl/Tk 编程入门参考 15.将字符串当作命令执行 eval
eval命令在多种编程语言中都存在,作用是把字符串当作语句来执行。这个命令或者说这种功能的主要用途是拼接语句:有时我们要运行的语句(代码段)不是立刻就能确定的,如果把多个语句的结果存储在多个变量中,就会导致代码繁杂——这种情况下先把代码当作字符串来拼接,拼接完毕后再把字符串当作代码来运行,就可以简化代码。
吐槽:
用法:
eval 参数1 参数2 参数3 ...
eval会将 所有参数 拼接成类似于列表的字符串(与concat命令相同)然后当作代码运行
简单示例:
eval puts 222
>> 222
# 记得要用英文分号 ; 标记每条语句结束
set code "puts 222;"
eval $code puts 333
>>222
>>333
接下来是Tcl/Tk里eval的注意事项,有变量的代码不要用双引号包裹,因为这样会导致在执行时先进行变量替换操作,产生下面这样的错误:
eval "set bb 233;" "puts $bb"
>>can't read "bb": no such variable
在Tclsh发现"puts $bb"时会进行$bb的替换操作(把$bb替换成变量值),但此时还没有bb这个变量,导致报错。正常写法:
eval set aa 233; puts $aa
>>233
额外:
部分情况,可以用uplevel代替eval