2

我在使用 Tcl 时遇到了一些问题。我有一个变量,其中有一个字符串。但现在我希望这个字符串成为下一个变量的名称。

我在网上发现了一些类似的问题,但这些都是关于将变量中的值放入另一个变量中。不使用它作为变量的名称。

这是帮助解释的示例代码:

    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]

因此,基本上它必须执行以下操作。该数组中有一些路径字符串。我只从没有文件扩展名的路径中得到文件的名称。

Butt 然后我想创建一个变量“cell”,它是“$name”的值。因此,当文件名是“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它会 yield 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 回答