1

我想在 tcl 中使用列表数组。这就是我初始化它的方式:

for {set i 0} {$i<5} {incr i} {
     set defer_req$i {}
}

它工作正常。但是当我在程序中使用这些列表时,它会给出一个错误“无法读取 defer_req,没有这样的变量”。请帮帮我

4

2 回答 2

4

您尚未创建数组。您已经创建了一组具有公共前缀“defer_req”和数字后缀的变量。正如 Tcl 手册的变量语法部分所给出的,数组寻址使用括号。所以你的赋值语句应该是

set defer_req($i) {}

在以后使用它的代码中,您可能会使用类似的东西:

puts $defer_req($memberName)

您不必使用数组 - 您可以保留代码原样,创建一组类似命名的变量。在这种情况下,要使用您需要的值:

puts [set defer_req$memberName]

它首先运行 set 语句(大括号内的部分)并将 $membername 扩展为创建完整变量名的后缀。然后只有一个参数的set 命令返回命名变量的值。

简单的版本 ($defer_req$memberName) 会尝试替换名为 defer_req 的变量的值,并将其值与名为 memberName 的变量的值连接起来。

于 2013-09-05T14:05:46.013 回答
1
 array set ar {}
 set ar(key) {}
 for {set i 0} {$i < 100} {incr i} {
   lappend ar(key) $i
 }
 puts $ar(key)
于 2013-09-06T06:42:26.053 回答