1

以下の小さなコードがあります。TCL インタープリターが初期化されていない変数に対してエラーをスローすることを期待していますが、エラーはスローしません。

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

初期化されていないため、 v2 のインタープリターによってエラーがスローされていません

4

1 に答える 1

5

まず、TCL のサブ言語( 、、exprでも使用されます) は、TCL 自体とは別の方法で機能します。このサブ言語では、変数置換ではなく、変数参照を意味します。変数は、含まれている部分式が評価されるときにアクセスされます。また、論理演算はショートサーキットであり、C 言語のように結果がわかるまで左から右にオペランドを評価します。ifwhilefor$

そのため$v2 == 3、あなたの例では評価されず、存在しない$v2ことはエラーではありません。この動作は、次のようなコードで一般的に使用されます。

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