【问题标题】:Tcl variable substitution inside $::$:: 内的 Tcl 变量替换
【发布时间】:2023-03-25 17:05:01
【问题描述】:

如果我定义以下列表:

set ::listofvariablesn [list {"inputfile" "Input file"}]
set ::inputfile "Somefile or numbers"

我可以使用以下方法检查变量 ::inputfile 是否存在:

foreach a $::listofvariablesn {
   if {[info exists ::[lindex $a 0]]} {
      puts "Ok" 
   }
}

但我无法使用以下方法访问 ::inputfile 的值:

foreach a $::listofvariablesn {   
    if {[checkvl "Input file" $::[lindex $a 0] 1 0 0 0]} { 
        puts "Ok" 
    }
}

我得到了错误: 无法读取“::”:没有这样的变量

有没有办法完成这种替换?我的意思是把 $::[lindex $a 0] 变成 $::inputfile 这样我就可以访问 ::inputfile 的值

非常感谢

【问题讨论】:

    标签: variables tcl substitution


    【解决方案1】:

    $ 是快捷方式,不能进行双重替换。 使用set 命令:

    if {[checkvl "Input file" [set ::[lindex $a 0]] 1 0 0 0]} { 
    

    【讨论】:

    • 谢谢布拉德。这完美地工作。明天早上更改我的代码。
    【解决方案2】:

    除了$ 的简写形式(set 命令的单参数形式)之外,还可以选择使用upvar 0 创建变量的别名(具有已知名称)。例如:

    upvar 0 $a b
    puts "exists: [info exists b]" 
    puts "value: $b" 
    

    您对变量b 所做的任何操作(更改upvar 除外)都将对$a 命名的变量执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2016-11-08
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多