コード例を次に示します。
set my_ref {$undefined_array(some_key)}
set my_val [subst $my_ref]
戻り値:
can't read "undefined_array(some_key)": no such variable
while executing
"subst $my_ref"
今のところこれをキャッチする方法はないようです
コード例を次に示します。
set my_ref {$undefined_array(some_key)}
set my_val [subst $my_ref]
戻り値:
can't read "undefined_array(some_key)": no such variable
while executing
"subst $my_ref"
今のところこれをキャッチする方法はないようです
指定したsubst
テキストに対して置換を実行しようとすると、一致する名前を持つ既存の変数が必要になります。そのような変数が存在しない場合subst
は、例外をスローしTCL LOOKUP VARNAME
ます。
それをどう捉えるか?またはを使用して、通常どおりに失敗した後 に例外をキャッチできます。あなたが言及した議論は、失敗する前に例外をキャッチすることに関する AFAICTでしたが、これはまだ不可能だと思います。subst
catch
try
subst
到着予定時刻:
私の「差別的な試み」コメントの概念実証。このコードには多くの潜在的な問題がありますが、少なくとも基本的な方法を示しています。この例では、ハンドラーは値として大文字の独自の名前を持つ変数を作成することによって反応します。
# CAUTION: demonstration code, do not use without modification
proc handler varName {
upvar 1 $varName name
set name [string toupper $varName]
}
unset -nocomplain foo bar
set baz xyz
set str {$foo $bar $baz}
while true {
try {
subst $str
} on ok res {
break
} trap {TCL LOOKUP VARNAME} {msg opts} {
handler [lindex [dict get $opts -errorcode] end]
}
}
set res
# -> FOO BAR xyz