Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Tcl将变量的值作为变量的名称_Variables_Tcl - Fatal编程技术网

Variables Tcl将变量的值作为变量的名称

Variables Tcl将变量的值作为变量的名称,variables,tcl,Variables,Tcl,我对Tcl有一些问题。我有一个变量,里面有一个字符串。但是现在我想让这个字符串成为下一个变量的名称 我在网上发现了一些类似的问题,但这些都是关于将一个变量的值放入另一个变量的问题。不使用它作为变量的名称 下面是帮助解释以下内容的示例代码: foreach key [array names ::openedFiles] { puts $::openedFiles($key) set filename [file tail $::openedFiles($key)]

我对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的值将是新变量的名称。这样我就可以创建一个包含数组中所有值的变量

任何帮助或指点都会很好


多谢各位

正确的解决方案是使用
$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
。不,不完全正确(除非我不明白你的意思,这是我的错)。我有一个var
a
,其中包含值
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
。不,不完全是(除非我不理解你的意思,否则是我的错)。我有一个var
a
,其中包含值
b
。然后我想创建一个名为
b
的新变量。我正在编写一个脚本,该脚本作为用于电子设计的查看程序的宏。我使用动态变量创建布局。但是布局会自动获取变量的名称。因此这就是为什么我想给每个变量一个不同的动态名称。在大多数情况下,如果你认为需要双重解引用,那么使用数组的元素实际上会更好。我正在编写一个脚本,它可以作为一个查看程序的宏,用于电子设计。我使用动态变量创建布局。但是布局会变得更复杂变量的名称是自动的。这就是为什么我要给每个变量一个不同的动态名称。在大多数情况下,如果你认为需要双重去引用,那么使用数组的一个元素实际上会更好。