期望TCL中的错误用于非初始化变量的代码

mad*_*dia 1 tcl

我有下面的小代码我期待TCL解释器为未初始化的变量抛出错误但它没有抛出错误

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

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

Ant*_*nko 5

第一,子语言expr在TCL,(它也被用在if,while,for)以另一种方式比TCL本身的工作原理.在这个子语言中,$并不意味着变量替换,而是变量引用.在评估包含子表达式时访问变量.并且逻辑操作是短路的,从左到右评估操作数直到结果已知,如在C语言中.

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

if {[info exists myvar] && $myvar} { .... }
Run Code Online (Sandbox Code Playgroud)