TCLスクリプトで変数を配列名(配列)として使用する

TCLスクリプトで変数を配列名(配列)として使用する

問題はTCL配列に関するものです。私のTCLスクリプトから variable1は、他の関数から取得した変数値(.と同様の値PATH_xyz)です。 variable2は、同様の値を持つ別の計算から得られた別の変数です{3.5400 7.3200}

私が欲しい:

set ${variable1}(modifyPt) {variable2}

puts ${variable1}(modifyPt)

正しいことは何ですか?

頑張った

set ${variable1}(modifyPt) $variable2

出力 >>>:4379.2160 13892.8270

puts ${variable1}(modifyPt)

出力 >>>:PATH_62_5474(modifyPt)

(実行時に保存されますPATH_62_5474)上記の2番目の出力の予想値。私も試しましたvariable1PATH_62_5474(modifyPt)4379.2160 13892.8270

puts ${${xysp}(modifyPt)}

出力 >>>:Error: can't read "${variable1": no such variable

ベストアンサー1

動的変数名を使用しないことをお勧めします。単純にするために、「複合」配列キーを作成できます。

# setup
set variable1 PATH_xyz
set variable2 {3.5400 7.3200}

# store the data in an array named "data"
set data($variable1,modifyPt) $variable2

# extracting it
% puts $data($variable1,modifyPt)    ; # => 3.5400 7.3200

# print the array contents
parray data    ; # => data(PATH_xyz,modifyPt) = 3.5400 7.3200

あなたできる動的変数名を持つ辞書を使用しますが、辞書からデータを抽出するのは少し奇妙です。

# store an empty dictionary in the variable "PATH_xyz"
set $variable1 [dict create]

# `dict set` takes a variable *name*
dict set $variable1 modifyPt $variable2

# `dict get` takes a variable *value*
dict get [set $variable1] modifyPt       ; # => 3.5400 7.3200

同様に、配列を同じように厄介な方法で使用できます。

array set $variable1 [list modifyPt $variable2]
parray $variable1                    ; # => PATH_xyz(modifyPt) = 3.5400 7.3200
puts [set ${variable1}(modifyPt)]    ; # => 3.5400 7.3200

それとも本当に怖い

puts [subst -nobackslashes -nocommands $${variable1}(modifyPt)]

おすすめ記事