4

これが私がやろうとしていることの例です。

set t SNS
set ${t}_top  [commands that return value]

${t}_topに保存されている情報を取得したい

puts “${t}_top”
 SNS_top  (really want the data stored there?)

$ {{$ t} _top}だったと思いますが、おそらくそれはperlでしたが、{}内の{}は機能しません。

4

4 に答える 4

7

Tcl の非常に興味深い点の 1 つは、投稿した質問で行っているように、変数名を動的に作成できることです。ただし、これにより、記述が難しくなり、コードを理解するのが必要以上に難しくなります。

${{$t}_top} と同等の処理を行う方法を見つけようとする代わりに、問題を完全に回避する方が間違いなく優れています。これは、連想配列を使用して行うことができます。

たとえば、これの代わりに:

set t SNS
set ${t}_top  [commands that return value]
...
puts [set ${t}_top]

これを行う:

set t SNS
set top($t) [commands that return value]
...
puts $top($t)

ほとんどの人は、後者の例の方がはるかに読みやすいことに同意します。

于 2009-10-23T15:44:02.130 に答える
4

試す

puts [set ${t}_top]
于 2009-10-23T13:06:49.187 に答える
2

Tcl のコードの各行は、置換フェーズ (変数、コマンドなどが置換される) を 1 回だけ実行されます... 通常は。そのため、次のようなもの

set var1 1
set var2 var1
set var3 $$var2

代入子が「$$var2」を「'$var2' という名前の変数の値 (文字通り)」に置き換えて停止するため、var3 が 1 になることはありません。

物事を別の方法で進めるか、別のラウンドの代替を強制するために必要なもの。もう 1 つの方法は、通常、2 回目の置換を必要としないようにすることです (Jackson が示すように)。

set var3 [set $var2]

ここで、$var2 は、置換中に「var1」に置き換えられます...その後、[set var1] は 1 を返します...次に、var3 は値「1」に設定されます...そして、あなたは良いです。

于 2009-10-23T13:39:35.987 に答える
1

構文

puts [expr $${t}_top]

同様に機能し、「設定」操作の使用を回避するため、構文エラーによってデータが上書きされることはありません。

于 2009-11-03T18:24:29.310 に答える