2

Tcl に問題があります。文字列を含む変数があります。しかし今、この文字列を次の変数の名前にしたいのです。

Web で同様の質問をいくつか見つけましたが、これらはすべて、変数の値を別の変数に配置することに関するものです。変数の名前として使用しないでください。

説明に役立つサンプルコードを次に示します。

    foreach key [array names ::openedFiles] {
    puts $::openedFiles($key)
    set filename [file tail $::openedFiles($key)]
    set parts [split $filename .]
    set name [lindex $parts 0]

    puts $name

    $L1 create cell $name

    set "value of $name" [ layout create $::openedFiles($key) -dt_expand -log LUN.log]

したがって、基本的には次のことを行う必要があります。配列にはパス文字列が含まれています。ファイル拡張子なしでパスからファイルの名前のみを取得します。

しかし、「$ name」の値である変数「cell」を作成したいと思います。したがって、ファイル名が「Test」の場合、 $name の値は「Test」になり、最後の行を次のようにしたい

     set Test [ layout create $::openedFiles($key) -dt_expand -log LUN.log]

$name の値が新しい変数の名前になるようにします。そのため、配列内のすべての値の名前を持つ変数を作成できます。

どんな助けや指針も素晴らしいでしょう!

どうもありがとうございました!

4

2 に答える 2

4

正しい解決策は、$name設定する最初のパラメーターとして使用することです

set name "foo"
set $name "bar"
puts $foo ;# -> bar

しかし、$nameそれを使用しようとするとfoo、そうではありませんbar(これは、コメントに従ってコードで行うことです。名前がわからない変数が必要な理由はわかりませんが、とにかく:

puts [set $name] ;# -> bar

正しいことを教えてくれます。同じことがオブジェクトでも機能します。

set topcell [[set $name] topcell]

だから私はあなたに尋ねなければなりません: 動的な名前付き変数で何をしたいですか?

于 2013-05-24T12:11:00.710 に答える
0

upvar「エイリアス」変数名を作成したいと考えています

$ tclsh
% set name Test
Test
% upvar 0 cell $name
% set cell 42
42
% puts $Test
42
于 2013-05-24T18:06:40.330 に答える