没有全名的调用程序
Call procedure without full name
我写了2个包:
第一个包裹:
# 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
我一次调用这 2 个包,如下所示:
# mypackage.tcl
package require mypackage::firstpackage 1.0
package require mypackage::secondpackage 1.0
package provide mypackage 1.0
现在,当我调用 mypackage 1.0
时,我不想这样调用我的过程的全名:
package require mypackage
# set myvar [mypackage::firstpackage::myproc] works...
set myvar [firstpackage::myproc]
我认为这是可能的......但我有这个错误:无效的命令名称“firstpackage::myproc”
我尝试在我的 2 个文件(firstpackage.tcl 和 secondpackage.tcl)中使用 namespace export myproc
或在 mypackage.tcl 中使用 namespace export *
但没有成功...
有没有办法在没有全名的情况下调用我的程序?
主要有两种方式。
- 在
namespace eval
中使用namespace export myproc
,然后在您希望使用它的上下文中使用namespace import mypackage::firstpackage::myproc
。
- 在您的使用上下文中执行
namespace path mypackage::firstpackage
,以便在那里额外查找命令。 (默认情况下,所有名称空间仅在自身和全局名称空间中查找命令;namespace path
在这两者之间插入。)
不推荐将namespace import
或namespace path
(在全局命名空间上)作为包定义的一部分;让消费代码执行此操作,因为这是拥有目标上下文的实际代码。基本上,全局命名空间是应用程序的命名空间,并且仅根据约定和历史,也是 Tcl 语言的命名空间。库代码通常不应直接对全局名称空间进行更改(少数例外情况,例如 Tk 小部件实例)。
我写了2个包:
第一个包裹:
# 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
我一次调用这 2 个包,如下所示:
# mypackage.tcl
package require mypackage::firstpackage 1.0
package require mypackage::secondpackage 1.0
package provide mypackage 1.0
现在,当我调用 mypackage 1.0
时,我不想这样调用我的过程的全名:
package require mypackage
# set myvar [mypackage::firstpackage::myproc] works...
set myvar [firstpackage::myproc]
我认为这是可能的......但我有这个错误:无效的命令名称“firstpackage::myproc”
我尝试在我的 2 个文件(firstpackage.tcl 和 secondpackage.tcl)中使用 namespace export myproc
或在 mypackage.tcl 中使用 namespace export *
但没有成功...
有没有办法在没有全名的情况下调用我的程序?
主要有两种方式。
- 在
namespace eval
中使用namespace export myproc
,然后在您希望使用它的上下文中使用namespace import mypackage::firstpackage::myproc
。 - 在您的使用上下文中执行
namespace path mypackage::firstpackage
,以便在那里额外查找命令。 (默认情况下,所有名称空间仅在自身和全局名称空间中查找命令;namespace path
在这两者之间插入。)
不推荐将namespace import
或namespace path
(在全局命名空间上)作为包定义的一部分;让消费代码执行此操作,因为这是拥有目标上下文的实际代码。基本上,全局命名空间是应用程序的命名空间,并且仅根据约定和历史,也是 Tcl 语言的命名空间。库代码通常不应直接对全局名称空间进行更改(少数例外情况,例如 Tk 小部件实例)。