2014-06-18 33 views
0

我使用ActiveState的TclDevKit調試通過我的代碼,但在程序中,我得到以下錯誤的執行一個角度去看待:的Tcl/Tk - 無法讀取「UserArray」:變量數組

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

在代碼中,在該行:

uplevel 1 [list set $name] 

我猜你的情況,$name == "UserArray"。上面的語句將在前面的堆棧幀執行:

set UserLevel 

這沒有任何意義,因爲UserLevel是一個數組 - 這就是錯誤消息要告訴你。我想知道你是否真的意思是:

upvar 1 $name UserArray 

爲了訪問數組從proc

+2

不幸的是,該代碼似乎在TclDevKit調試器內 –

+0

調試器有一個錯誤? Nooooooooo! (有報道過嗎?) –

+1

我不認爲這是一個錯誤,但調試器樂器文件的方式相當煩人。當用[file dirname [info script]]設置文件路徑時,代碼實際上會返回TclDebugger的路徑名 - 而不是腳本的位置!所以我必須將整個工作環境移動到TclDevKit的bin目錄中才能使調試器工作,hahahaha。 – Grandclosing