2015-11-17 95 views
2

我可能在這裏丟失了一些明顯的東西,但也許你可以幫助我。無法在TCL中調用proc無效的命令名稱

我有一個tcl腳本。這是全部:

puts [encodeSDR 25] 

proc encodeSDR {input} { 
    set sdr "test" 

    return $sdr 
} 

當我運行該腳本,我得到一個錯誤:

c:\temp>tclsh testenviro.tcl 
invalid command name "encodeSDR" 
    while executing 
"encodeSDR" 
    invoke from within 
"puts [encodeSDR 25]" 
    (file "testenviro.tcl" line 1) 

我缺少什麼?似乎這應該完美。

PS。發現可能的原因:

有當我把放稱它爲工作的PROC下面 - 因此它不是第一次加載整個腳本?似乎很奇怪,如果是這樣的話,但也許就是這樣。

+1

程序中的代碼可以是字節碼編譯的,但「全局」級別的代碼仍然可以解釋。意識到'proc'只是一個常規命令,結果並不令人驚訝。我經常把所有「全局」代碼放在一個'main'進程中,然後唯一的「全局」命令就是調用'main'。 –

回答

3

你是正確的,因爲在執行任何執行之前,整個腳本沒有被加載。 TCL腳本一次解釋一個命令,然後只有在完成後纔會移動到下一個命令。事先沒有編譯來檢查下面可能引用的過程。

對你來說,它首先試圖解釋puts命令,其中涉及調用encodeSDR。既然這還沒有在內存中定義,解釋者不知道你在做什麼。

有一點需要注意的是,如果你由其自身確定的程序(比如測試/調試期間),再後來把它添加到一個腳本像你的榜樣的方式。它會工作得很好,直到你關閉會話,並且TCL的內存被釋放。但是,下次加載腳本時,腳本將失敗,因爲該過程從未加載過該會話。

+0

您可以隨時創建一個'proc main {} ...',然後從腳本底部調用它。 –

相關問題