這是一個簡化的問題。我試圖將一個過程複製到一個名稱空間,以便它將使用名稱空間自己的上下文。使用進口不工作(可能是因爲它僅僅是創建別名)請參見下面的代碼:將一個proc複製到TCL中的命名空間
proc me_namespace {} {
puts "namespace is:[namespace current]"
puts "called namespace is:[uplevel 1 namespace current ]"
}
namespace eval foo {} {
me_namespace
puts "Now import"
namespace import ::::me_namespace
me_namespace
}
代碼輸出爲:
namespace is:::
called namespace is:::foo
Now import
namespace is:::
called namespace is:::foo
namespace is:::foo
理想情況下,PROC me_namespace一號線輸出,複製後,應成爲:
::::me_namespace
任何想法?我能想到的唯一方法是將程序定義放在一個文件中,然後閱讀文件並使用eval,但是我正在尋找更優雅的東西。 ,我不只是使用uplevel
究其原因,是在時間(尤其是在使用variable
與uplevel
是運行時,一時間,實在太慢,TCL的版本是8.6
命名空間手冊頁(http://www.tcl.tk/man/tcl/TclCmd/namespace.htm)表示導入僅適用於導出的命令。您必須導出命令。我試過這個和':: foo :: me_namespace'工作。但是,爲什麼你需要在全局命名空間中導入一個過程? –
看來你正在使用名稱空間來實現某種類型的OOP。你考慮過TclOO嗎? –