這裏是我的測試代碼:使用與TCL eval命令「設置」
proc check_eval {} {
set cmd {set return_val {}; set return_val}
puts "Command to evaluate : $cmd"
uplevel eval $cmd
}
我遇到了以下問題:當我打電話「check_eval」,它看起來像設置RETURN_VAL聲明」 {} 「被忽略。即,interpeter在調用範圍內查找現有的return_val變量。 實施例:
tcl>unset return_val
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
can't read "return_val": no such variable
while evaluating check_eval
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val {}; set return_val
556
tcl>
在另一方面,如果我替換 「設置RETURN_VAL {}」 中通過,例如, 「設置RETURN_VAL 10000」 的程序,它會運行時,顯示10000:
tcl>set return_val 556
556
tcl>check_eval
Command to evaluate : set return_val 10000; set return_val
10000
tcl>set return_val
10000
有沒有人可以解釋我請這裏發生了什麼?
謝謝。
@mkostya,讀出的[ 「評估和報價」](HTTP:// beedub .com/book/3rd/Eval.pdf)一書,以便更好地理解本書引用問題。 – kostix
或者,'uplevel [list eval $ cmd]'。這與'uplevel $ cmd'完全相同,所以猜猜哪個更好... –
感謝所有人(特別是potrzebie)的答案! – mkostya