将变量值声明为数组以及如何访问该值

declaring variable value as array and how to access the value

我正在用一个带有值的预定义变量声明我的数组。现在我想使用预定义的变量名访问数组值,而不是使用 tcl 的变量值。

示例:

set asd pll

set ${asd}(direct) input

puts ${$asd}(direct) # i am gettig error "can't read "$asd": no such variable"

puts $pll(direct) # "input" ( now i am able to access my array value)

我只想从 asd 变量访问我的数组值。有没有办法使用 tcl 获取它。

您已经找到了如何写入它。要从中读取,请使用 set 的单参数形式,而不是无效的嵌入式-$-形式:

# set with a single argument does a read
puts [set ${asd}(direct)]

另一个没有用,因为 ${…} 是一个 syntactic 形式,根本不解释大括号内的位(除了寻找 ::(…),因为它们是变量名的一部分)。


但是,你应该使用upvar 0来创建一个变量别名:

set asd pll
upvar 0 $asd ary

# Now we can use simple access syntax
set ary(direct) input
puts $ary(direct)

# Show that it has worked for real...
parray pll

当你在一个过程中时,这会更好地工作,因为别名只会持续到过程完成。否则,您可以在不更改基础变量的情况下对别名执行的唯一操作是将别名重新定位为指向不同的变量。 (当您执行 upvar 1 时,使用相同的机制。它只是在不同的堆栈框架中查找别名变量。)