【问题标题】:Tcl placing a value of a variable as the name a the variableTcl 将变量的值作为变量的名称
【发布时间】:2013-05-24 11:51:45
【问题描述】:

我在使用 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 的值就是新变量的名称。所以我可以用数组中所有值的名称创建一个变量。

任何帮助或指点都会很棒!

非常感谢!

【问题讨论】:

  • set $name [ layout create $::openedFiles($key) -dt_expand -log LUN.log] 不工作吗?
  • 显然没有,因为当我想这样做时,我会继续使用下一个代码:set cell_top [$name topcell] 我收到一个错误,他找不到 $name 的选项 topcell。但是,当我只使用没有变量的名称时,它就可以了...
  • 我做对了吗?你有一个变量,比如a,其中包含另一个变量的名称,比如b,你想通过引用a来分配给b
  • 不,不完全是(除非我没有理解你的正确,而不是我的错)。我有一个 var a,其中包含值 b。然后我想创建一个名为b的新变量。

标签: variables tcl


【解决方案1】:

正确的解决方法是使用$name作为第一个参数来设置

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

但是,如果您尝试使用 $name,它将产生 foo,而不是 bar(根据 cmets,您在代码中执行的操作。我不知道为什么您需要一个您自己命名的变量不知道,但无论如何:

puts [set $name] ;# -> bar

会给你正确的东西。对象也是如此:

set topcell [[set $name] topcell]

所以我不得不问你:那你想对动态命名变量做什么呢?

【讨论】:

  • 我正在编写一个脚本,该脚本用作电子设计的查看程序的宏。我使用动态变量来创建布局。但是布局会自动获取变量的名称。所以这就是为什么我想给每个变量一个不同的动态名称
  • 大多数情况下,您认为需要双重解引用实际上最好使用数组元素。
【解决方案2】:

我想你想让upvar 创建一个“别名”变量名

$ tclsh
% set name Test
Test
% upvar 0 cell $name
% set cell 42
42
% puts $Test
42

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多