我想在tcl中使用一个列表数组。这是我初始化它的方式:
for {set i 0} {$i<5} {incr i} {
set defer_req$i {}
}
工作正常。但是当我在程序中使用这些列表时,它会给出一个错误“无法读取defer_req,没有这样的变量”。请帮帮我
答案 0 :(得分:4)
您尚未创建数组。您已经创建了一组变量,其公共前缀为“defer_req”,并带有数字后缀。正如Tcl手册的variable syntax部分所述,数组寻址使用括号。所以你的任务说明应该是
set defer_req($i) {}
在以后使用它的代码中,你可以使用类似的东西:
puts $defer_req($memberName)
您不必使用数组 - 您可以保留代码,创建一组类似命名的变量。在这种情况下,使用您需要的值:
puts [set defer_req$memberName]
首先运行set语句(大括号内的部分)并将$ membername扩展为后缀,创建完整的变量名称。然后只有一个参数的set command返回命名变量的值。
天真版本($ defer_req $ memberName)将尝试替换名为defer_req的变量的值,并将其值与名为memberName的变量的值相连接。
答案 1 :(得分:1)
array set ar {}
set ar(key) {}
for {set i 0} {$i < 100} {incr i} {
lappend ar(key) $i
}
puts $ar(key)