【问题标题】:Certain elements in tcl array not accessable (i.e. "no such element in array")tcl 数组中的某些元素不可访问(即“数组中没有这样的元素”)
【发布时间】:2019-10-02 14:38:01
【问题描述】:

我已经声明了一个数组,我可以通过循环访问其中的所有元素,但是当我尝试直接访问某些元素时,它们不存在。

我尝试通过 CUI 访问数组,编写脚本来执行此操作,既可以直接在循环中,也可以通过将键设为变量;这种行为很奇怪。

我事先声明了我的数组 tileDirectory,当我进入 CUI 时

foreach {a b} [数组获取 tileDirectory] ​​{puts $a}

xu/iq/grf/reg23DataReg/[0]

su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0]

xu/cq/cq00/cqStatusReg/[0]

su/busReq/memIntfc/memReqStDataReg/[96]_nocgc

但是如果我这样做:

puts $tileDirectory(su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0])

无法读取“tileDirectory(su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0])”:数组中没有这样的元素

除了我可以读取数组的元素之外,我会注意其他元素我可以很好地读取,并且为了模式,它往往是带有“。”的名称。在那些给我带来麻烦的地方

【问题讨论】:

  • 这很奇怪。我原以为错误是:无效的命令名称“31”
  • 如果你这样做了怎么办:set key {su/pipe/dcacheTag/dcPLRUEntry[31].dcPLRUEntryXReg/[0]}; puts $tileDirectory($key)
  • @glenn jackman:这仍然给了我“数组中没有这样的元素”,非常奇怪
  • 当你只是puts [list [array get tileDirectory]] 时会发生什么——你看到任何多余的空格吗?
  • @glennjackman 工作正常,一切都打印出来,即使是给我错误的条目,如果在我的原始循环中我放入 $tileDirectory($a) 而不是放入 $a,即使这样有效,即使它调用相同的数组键

标签: arrays tcl global


【解决方案1】:

显然,您在多个位置(或不同的命名空间)定义了数组,例如下面的示例程序。要使以下程序正常工作,必须取消注释 global td 语句。

proc myproc { } {
  # global td
  set td(abc) 123

  puts $td(def)
}

set td(def) 456
puts $td(def)
myproc

【讨论】:

  • 我的数组是全局定义的,这没有任何意义,因为我的数组访问为什么对其他所有东西都很好,它似乎只是给我带来了包含句点的键的麻烦( ".") 在他们的变量中。
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多