这是一个简化的问题。我试图将一个过程复制到一个名称空间,以便它将使用名称空间自己的上下文。使用进口不工作(可能是因为它仅仅是创建别名)请参见下面的代码:将一个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吗? –