Arrays tcl数组中的某些元素不可访问(即“数组中没有此类元素”)
我声明了一个数组,我可以通过一个循环访问其中的所有元素,但当我试图直接访问某些元素时,它们并不存在 我曾尝试通过CUI访问数组,并编写脚本来实现这一点,包括直接在循环中访问,以及将键设置为变量;这种行为很奇怪 我在前面和输入CUI时声明了数组tileDirectory foreach{ab}[array get tileDirectory]{put$a} xu/iq/grf/reg23DataReg/[0] su/pipe/dcacheTag/dcPLRUEntry[31]。dcPLRUEntryXReg/[0] xu/cq/cq00/cqStatusReg/[0] su/busReq/memIntfc/memReqStDataReg/[96]\u nocgc 但是,如果我这样做: 放入$tileDirectory(su/pipe/dcacheTag/dcPLRUEntry[31]。dcPLRUEntryXReg/[0]) 无法读取“tileDirectory(su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0]):数组中没有这样的元素Arrays tcl数组中的某些元素不可访问(即“数组中没有此类元素”),arrays,tcl,global,Arrays,Tcl,Global,我声明了一个数组,我可以通过一个循环访问其中的所有元素,但当我试图直接访问某些元素时,它们并不存在 我曾尝试通过CUI访问数组,并编写脚本来实现这一点,包括直接在循环中访问,以及将键设置为变量;这种行为很奇怪 我在前面和输入CUI时声明了数组tileDirectory foreach{ab}[array get tileDirectory]{put$a} xu/iq/grf/reg23DataReg/[0] su/pipe/dcacheTag/dcPLRUEntry[31]。dcPLRUEnt
除了我可以读取数组的元素外,我还可以读取数组的其他元素,注意,我可以很好地读取其他元素,而且出于模式的考虑,这些元素往往是带有“.”的名称。在这些名称中,给我带来了麻烦显然,您在多个位置(或不同的名称空间)定义了数组,例如下面的示例程序。要使以下程序正常工作,必须取消对
global td
语句的注释
proc myproc { } {
# global td
set td(abc) 123
puts $td(def)
}
set td(def) 456
puts $td(def)
myproc
真奇怪。我本以为错误是:无效的命令名“31”,如果您这样做:
set key{su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0]};puts$tileDirectory($key)
?@glenn jackman:这仍然让我觉得“数组中没有这样的元素”,非常奇怪当你puts[list[array get tileDirectory]]
时会发生什么——你看到任何额外的空格吗?@glennjackman工作正常,所有内容都会打印出来,甚至是给我错误的条目,如果在我最初的循环中,我将$tileDirectory($a)替换为puts$a,即使这样也行,即使它调用同一个数组keymy array是全局定义的,这也没有意义,那么为什么我的数组访问对其他所有东西都可以完美地工作,它似乎只是给我带来了包含句点(“.”)的键的麻烦在他们的变量中。