1

我有下面的小代码,我希望 TCL 解释器为未初始化的变量抛出错误,但它不会抛出错误

set v1 "test" 
if { ($v1 != "test") && ($v2 == "3") } { 
  puts "fun" 
} 
#v2 is not initialized   

v2 的解释器没有抛出任何错误,因为它没有初始化

4

1 回答 1

5

首先,exprTCL 中的子语言(也用于if, while, for)的工作方式不同于 TCL 本身。在这种子语言中,$并不意味着变量替换,而是变量引用。变量在其包含的子表达式被求值时被访问。并且逻辑运算是短路的,从左到右评估操作数直到结果已知,就像在 C 语言中一样。

这就是为什么$v2 == 3在您的示例中未评估的原因,并且不存在$v2不是错误。这种行为通常与这样的代码一起使用:

if {[info exists myvar] && $myvar} { .... }
于 2013-01-17T09:51:00.983 回答