Tcl / Tk - 无法读取" UserArray":变量是数组

时间:2014-06-18 19:05:44

标签: arrays debugging tcl tk tcldevkit

我正在使用ActiveState的TclDevKit调试器来查看我的代码但是在程序执行的某一点上我得到以下错误:

can't read "UserArray": variable is array
    while executing
"set UserArray"
    ("uplevel" body line 1)
    invoked from within
"DbgNub_uplevelCmd DbgNub_uplevelCmd $args"
    invoked from within
"uplevel 1 [list set $name]"
    (procedure "DbgNub_TraceVar" line 53)
    invoked from within
"DbgNub_TraceVar 1 array UserArray time1_satOTRS1,2 w"
    (write trace on "UserArray(time1_satOTRS1,2)")
    invoked from within
"set UserArray($item,$window) $profile_array($item)"

这个错误完全让我感到困惑,因为据我了解Tcl / Tk,我所做的是完全有效和合法的。代码如下:

foreach item [array names profile_array] {
    set UserArray($item,$window) $profile_array($item)
}

在Tcl中,允许读取和写入数组中的索引,我不认为这里应该有错误......我是否遗漏了一些细节?

1 个答案:

答案 0 :(得分:0)

在您的代码中,在以下行:

uplevel 1 [list set $name]

我猜你的情况是$name == "UserArray"。上述语句将在前一个堆栈帧执行:

set UserLevel

这没有意义,因为UserLevel是一个数组 - 这是错误消息试图告诉你的内容。我想知道你的意思是否真的:

upvar 1 $name UserArray

以便从proc

访问数组