Tcl/Tk 編程入門參考 15.將字符串當作命令執(zhí)行 eval
eval命令在多種編程語言中都存在,作用是把字符串當作語句來執(zhí)行。這個命令或者說這種功能的主要用途是拼接語句:有時我們要運行的語句(代碼段)不是立刻就能確定的,如果把多個語句的結果存儲在多個變量中,就會導致代碼繁雜——這種情況下先把代碼當作字符串來拼接,拼接完畢后再把字符串當作代碼來運行,就可以簡化代碼。
吐槽:
用法:
eval 參數(shù)1 參數(shù)2 參數(shù)3 ...
eval會將 所有參數(shù) 拼接成類似于列表的字符串(與concat命令相同)然后當作代碼運行
簡單示例:
eval puts 222
>> 222
# 記得要用英文分號 ; 標記每條語句結束
set code "puts 222;"
eval $code puts 333
>>222
>>333
接下來是Tcl/Tk里eval的注意事項,有變量的代碼不要用雙引號包裹,因為這樣會導致在執(zhí)行時先進行變量替換操作,產(chǎn)生下面這樣的錯誤:
eval "set bb 233;" "puts $bb"
>>can't read "bb": no such variable
在Tclsh發(fā)現(xiàn)"puts $bb"時會進行$bb的替換操作(把$bb替換成變量值),但此時還沒有bb這個變量,導致報錯。正常寫法:
eval set aa 233; puts $aa
>>233
額外:
部分情況,可以用uplevel代替eval
標簽: