我在使用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]
所以贝司必须做到以下几点。该数组中包含一些路径字符串。我只获取文件的名称,没有文件扩展名。
然后我要创建一个变量“cell”,它是“$ name”的值。因此,当文件名为“Test”时,$ name的值将为“Test”,我想像这样做最后一行
set Test [ layout create $::openedFiles($key) -dt_expand -log LUN.log]
因此$ name的值将是新变量的名称。所以我可以使用数组中所有值的名称创建一个变量。
任何帮助或指示都会很棒!
非常感谢!
答案 0 :(得分:4)
正确的解决方案是使用$name
作为第一个参数来设置
set name "foo"
set $name "bar"
puts $foo ;# -> bar
但如果您尝试使用$name
,则会产生foo
,而不是bar
(根据评论,您在代码中执行此操作。我不知道您为什么这么做需要一个你不知道名字的变量,但无论如何:
puts [set $name] ;# -> bar
会给你正确的东西。同样适用于对象:
set topcell [[set $name] topcell]
所以我不得不问你:那么你想用动态命名变量做什么呢?
答案 1 :(得分:0)
我想你想upvar
创建一个“别名”变量名
$ tclsh
% set name Test
Test
% upvar 0 cell $name
% set cell 42
42
% puts $Test
42