tcl でリストの配列を使用したい。これは私がそれを初期化した方法です:
for {set i 0} {$i<5} {incr i} {
set defer_req$i {}
}
その正常に動作します。しかし、プロシージャでこれらのリストを使用すると、「defer_req を読み取れません。そのような変数はありません」というエラーが表示されます。私を助けてください
配列を作成していません。「defer_req」という共通の接頭辞と数値の接尾辞を持つ一連の変数を作成しました。Tcl マニュアルの変数構文の部分に記載されているように、配列のアドレス指定には括弧が使用されます。したがって、割り当てステートメントは
set defer_req($i) {}
これを使用する後のコードでは、次のようなものを使用できます。
puts $defer_req($memberName)
配列を使用する必要はありません。コードをそのままにして、同様の名前の変数のセットを作成することができます。その場合、必要な値を使用するには:
puts [set defer_req$memberName]
最初に set ステートメント (中かっこ内の部分) を実行し、$membername をサフィックスに展開して、完全な変数名を作成します。次に、引数を 1 つだけ指定したset コマンドは、名前付き変数の値を返します。
素朴なバージョン ($defer_req$memberName) は、defer_req という変数の値を代入し、その値を memberName という変数の値と連結しようとします。
array set ar {}
set ar(key) {}
for {set i 0} {$i < 100} {incr i} {
lappend ar(key) $i
}
puts $ar(key)