以下の小さなコードがあります。TCL インタープリターが初期化されていない変数に対してエラーをスローすることを期待していますが、エラーはスローしません。
set v1 "test"
if { ($v1 != "test") && ($v2 == "3") } {
puts "fun"
}
#v2 is not initialized
初期化されていないため、 v2 のインタープリターによってエラーがスローされていません
以下の小さなコードがあります。TCL インタープリターが初期化されていない変数に対してエラーをスローすることを期待していますが、エラーはスローしません。
set v1 "test"
if { ($v1 != "test") && ($v2 == "3") } {
puts "fun"
}
#v2 is not initialized
初期化されていないため、 v2 のインタープリターによってエラーがスローされていません
まず、TCL のサブ言語( 、、expr
でも使用されます) は、TCL 自体とは別の方法で機能します。このサブ言語では、変数置換ではなく、変数参照を意味します。変数は、含まれている部分式が評価されるときにアクセスされます。また、論理演算はショートサーキットであり、C 言語のように結果がわかるまで左から右にオペランドを評価します。if
while
for
$
そのため$v2 == 3
、あなたの例では評価されず、存在しない$v2
ことはエラーではありません。この動作は、次のようなコードで一般的に使用されます。
if {[info exists myvar] && $myvar} { .... }