TCL变量范围:访问命令内声明的变量

时间:2016-04-27 22:10:08

标签: tcl

我对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规则。

1 个答案:

答案 0 :(得分:4)

Tcl中唯一的范围是procnamespace eval

大括号是(脚本或字符串)的容器,而不是组,并且不定义新范围。

if语句包含:if后跟 expr ,后跟 body expr body 都只是包含表达式和脚本的字符串。

请记住,Tcl不是Algol派生的语言,你不能将规则从C转移到Tcl。