0

我正在使用 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 中,允许读取和写入数组中的索引,我认为这里不应该有错误......我错过了一些细节吗?

4

1 回答 1

0

在您的代码中,在该行:

uplevel 1 [list set $name]

我想在你的情况下,$name == "UserArray". 上述语句将在前一个堆栈帧执行为:

set UserLevel

这是没有意义的,就像UserLevel一个数组一样——这就是错误消息试图告诉你的。我想知道你的意思是不是真的:

upvar 1 $name UserArray

为了从 a 访问数组proc

于 2014-06-18T20:38:28.637 回答