这是我正在测试的代码:
proc check_eval {} {
set cmd {set return_val {}; set return_val}
puts "Command to evaluate : $cmd"
uplevel eval $cmd
}
我遇到了以下问题:当我调用“check_eval”时,看起来语句“set 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>
另一方面,如果我将程序中的“set return_val {}”替换为“set 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
有人可以解释一下这里发生了什么吗?
谢谢。