我正在使用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中,允许读取和写入数组中的索引,我不认为这里应该有错误......我是否遗漏了一些细节?
答案 0 :(得分:0)
在您的代码中,在以下行:
uplevel 1 [list set $name]
我猜你的情况是$name == "UserArray"
。上述语句将在前一个堆栈帧执行:
set UserLevel
这没有意义,因为UserLevel
是一个数组 - 这是错误消息试图告诉你的内容。我想知道你的意思是否真的:
upvar 1 $name UserArray
以便从proc
。