Tcl 无全名调用过程
我写了两个包:Tcl 无全名调用过程,tcl,Tcl,我写了两个包: 第一包: # firstpackage.tcl namespace eval mypackage::firstpackage {} proc mypackage::firstpackage::myproc {} { # ... } package provide mypackage::firstpackage 1.0 # secondpackage.tcl namespace eval mypackage::secondpackage {} proc mypackage
第一包:
# firstpackage.tcl
namespace eval mypackage::firstpackage {}
proc mypackage::firstpackage::myproc {} {
# ...
}
package provide mypackage::firstpackage 1.0
# secondpackage.tcl
namespace eval mypackage::secondpackage {}
proc mypackage::secondpackage::myproc {} {
# ...
}
package provide mypackage::secondpackage 1.0
第二套:
# firstpackage.tcl
namespace eval mypackage::firstpackage {}
proc mypackage::firstpackage::myproc {} {
# ...
}
package provide mypackage::firstpackage 1.0
# secondpackage.tcl
namespace eval mypackage::secondpackage {}
proc mypackage::secondpackage::myproc {} {
# ...
}
package provide mypackage::secondpackage 1.0
我同时调用这两个包,如下所示:
# mypackage.tcl
package require mypackage::firstpackage 1.0
package require mypackage::secondpackage 1.0
package provide mypackage 1.0
package require mypackage
# set myvar [mypackage::firstpackage::myproc] works...
set myvar [firstpackage::myproc]
现在,当我调用mypackage 1.0
时,我不想这样调用我的过程的全名:
# mypackage.tcl
package require mypackage::firstpackage 1.0
package require mypackage::secondpackage 1.0
package provide mypackage 1.0
package require mypackage
# set myvar [mypackage::firstpackage::myproc] works...
set myvar [firstpackage::myproc]
我认为这是可能的。。。但我有一个错误:无效的命令名“firstpackage::myproc”我尝试在我的两个文件(firstpackage.tcl和secondpackage.tcl)中使用
名称空间导出myproc
,或在mypackage.tcl中使用名称空间导出*
,但没有成功…有没有办法不用全名调用我的过程?有两种主要方法
namespace eval
中使用namespace export myproc
,然后在希望使用它的上下文中使用namespace import mypackage::firstpackage::myproc
名称空间路径mypackage::firstpackage
,以便在那里额外查找命令。(默认情况下,所有名称空间仅在自身和全局名称空间中查找命令;名称空间路径
在这两者之间插入。)不建议将
名称空间导入
或名称空间路径
(在全局名称空间上)作为包定义的一部分;让消费代码这样做,因为这是拥有目标上下文的实际代码。基本上,全局名称空间是应用程序的名称空间,根据惯例和历史,也是Tcl语言的名称空间。库代码通常不应直接更改全局名称空间(只有少数例外,如Tk小部件实例)。它与名称空间路径mypackage
一起工作,但与名称空间路径mypackage::firstpackage
不一起工作。您知道吗?在我的上下文中,名称空间eval
+名称空间import mypackage::firstpackage::myproc
中的名称空间导出myproc
不起作用。另一个想法?@Mkn名称空间路径
是名称空间的单一列表;如果您使用它两次(对于特定名称空间),那么它将替换。