我对TCL的可变范围规则感到困惑,这是一个实验:
if {2 > 1} {
set x 100
}
proc p1 {} {
set y 200
}
puts $x
p1
puts $y
运行脚本会给我:
100
can't read "y": no such variable
while executing
"puts $y"
这让我很困惑:关于$ y的错误是有道理的,因为y是在proc中定义的,所以它在proc之外是不可访问的。问题是x,为什么它可以访问?它是在"的嵌套脚本中定义的,如果"命令。
从C ++的习惯性思维来看,它没有意义。 TCL是否对命令进行了特殊处理" proc"这样在嵌套脚本中声明的变量与其他变量的处理方式不同,例如"如果"," for"等等?
BTW我知道如何使其工作,只是想了解变量范围的TCL规则。