Variables Tcl将变量的值作为变量的名称
我对Tcl有一些问题。我有一个变量,里面有一个字符串。但是现在我想让这个字符串成为下一个变量的名称 我在网上发现了一些类似的问题,但这些都是关于将一个变量的值放入另一个变量的问题。不使用它作为变量的名称 下面是帮助解释以下内容的示例代码:Variables Tcl将变量的值作为变量的名称,variables,tcl,Variables,Tcl,我对Tcl有一些问题。我有一个变量,里面有一个字符串。但是现在我想让这个字符串成为下一个变量的名称 我在网上发现了一些类似的问题,但这些都是关于将一个变量的值放入另一个变量的问题。不使用它作为变量的名称 下面是帮助解释以下内容的示例代码: foreach key [array names ::openedFiles] { puts $::openedFiles($key) set filename [file tail $::openedFiles($key)]
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的值将是新变量的名称。这样我就可以创建一个包含数组中所有值的变量
任何帮助或指点都会很好
多谢各位 正确的解决方案是使用
$name
作为要设置的第一个参数
set name "foo"
set $name "bar"
puts $foo ;# -> bar
但是,如果您尝试使用$name
,它将生成foo
,而不是bar
(根据注释,这就是您在代码中所做的。我不知道您为什么需要一个名称未知的变量,但无论如何:
puts [set $name] ;# -> bar
将为您提供正确的内容。同样适用于对象:
set topcell [[set $name] topcell]
因此,我必须问您:那么您想对动态命名变量做什么?正确的解决方案是使用
$name
作为第一个要设置的参数
set name "foo"
set $name "bar"
puts $foo ;# -> bar
但是,如果您尝试使用$name
,它将生成foo
,而不是bar
(根据注释,这就是您在代码中所做的。我不知道您为什么需要一个名称未知的变量,但无论如何:
puts [set $name] ;# -> bar
将为您提供正确的内容。同样适用于对象:
set topcell [[set $name] topcell]
所以我必须问你:那么你想对动态命名变量做什么?我想你想创建一个“别名”变量名
$ tclsh
% set name Test
Test
% upvar 0 cell $name
% set cell 42
42
% puts $Test
42
我想您应该创建一个“别名”变量名
$ tclsh
% set name Test
Test
% upvar 0 cell $name
% set cell 42
42
% puts $Test
42
设置$name[layout create$::openedFiles($key)-dt_expand-log LUN.log]
不起作用吗?显然不起作用,因为当我想这样做时,我会继续下一个代码:设置cell\u top[$name topcell]
我得到一个错误,他找不到$name的topcell选项。但是当我只使用一个没有变量的名称时,它就起了作用,所以…我做对了吗?你有一个变量,比如说a
,它包含另一个变量的名称,比如b
,你想通过引用a
分配到b
。不,不完全正确(除非我不明白你的意思,这是我的错)。我有一个vara
,其中包含值b
。然后我想创建一个名为b
的新变量。不设置$name[layout create$::openedFiles($key)-dt\u expand-log LUN.log]
work?显然不是,因为当我想这样做时,我会进一步使用下一个代码:set cell\u top[$name topcell]
我得到一个错误,他找不到$name的topcell选项。但是当我只使用一个没有变量的名称时,它就起了作用,所以…我做对了吗?你有一个变量,比如说a
,它包含另一个变量的名称,比如b
,你想通过引用a
分配到b
。不,不完全是(除非我不理解你的意思,否则是我的错)。我有一个vara
,其中包含值b
。然后我想创建一个名为b
的新变量。我正在编写一个脚本,该脚本作为用于电子设计的查看程序的宏。我使用动态变量创建布局。但是布局会自动获取变量的名称。因此这就是为什么我想给每个变量一个不同的动态名称。在大多数情况下,如果你认为需要双重解引用,那么使用数组的元素实际上会更好。我正在编写一个脚本,它可以作为一个查看程序的宏,用于电子设计。我使用动态变量创建布局。但是布局会变得更复杂变量的名称是自动的。这就是为什么我要给每个变量一个不同的动态名称。在大多数情况下,如果你认为需要双重去引用,那么使用数组的一个元素实际上会更好。