2017-08-28 49 views
0

我有一系列正在解釋器(Cadence Innovus)中執行的Tcl腳本。我想要一種將命令分組並執行一次調用的方法。在功能上,我可以通過將每組命令寫入單獨的文件並調用source <group_file_name>來實現此目的。但是定義這麼多文件是不方便的。什麼是Tcl中源代碼的函數?

我試圖與要做到這一點:

proc {} { 
    commands... 
} 

這不給我我需要的,雖然功能。我相信它會在較低的命名空間中執行命令,並且所設置的變量不會保留。

有沒有辦法讓這個功能(具有可調用函數的單個文件),但是在相同的命名空間中執行?

回答

1

那麼,您可以在該過程中始終使用uplevelnamespace eval來更改當前名稱空間。如果你使用uplevel,你可以這樣做:

proc foo {} { 
    uplevel 1 { 
     TheFirstCommand 
     TheSecondCommand 
     TheThirdCommand 
    } 
} 

隨着namespace eval,你可能反而做到這一點:

proc foo {} { 
    namespace eval ::theTargetNamespace { 
     TheFirstCommand 
     TheSecondCommand 
     TheThirdCommand 
    } 
} 

事情變得有點複雜,如果你想使用與局部變量範圍轉換器,但如何管理事物的原則與您使用的任何機制大致相同。

proc foo {} { 
    set a [uplevel 1 { TheFirstCommand }] 
    set b [uplevel 1 { TheSecondCommand }] 
    # Dynamically-generate the script to run; it's trivial code generation 
    uplevel 1 [list TheThirdCommand $a $b] 
} 

切換到namespace eval幾乎是一個直接替代品。

相關問題