Sal*_*ddu 2 namespaces tcl package
我是tcl/tk的初学者.我正在尝试使用命名空间集合创建一个包.
我的想法是创建一组文件,以便简单地管理项目,例如 <name_package>-<name_procedure>.tcl
您能解释一下如何将命名空间集合拆分成包中的几个文件吗?
我正在尝试创建一个包含的文件
package provide <name> 0.1
namespace eval <namespace> {
namespace export proc1 proc2 proc3 ...
namespace ensemble create
}
Run Code Online (Sandbox Code Playgroud)
以及包含这些程序的文件
package provide <name> 0.1
proc ::<namespace>::proc { ... } {
...
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.
我很感激任何建议.
非常感谢
我会使用pkgIndex文件来获取包的所有组成文件.这将加载一切.然后在解释器加载完所有内容后声明整体.
package ifneeded Mypackage 1.2.3 \
"source \[file join [list $dir] pkg-part1.tcl\] ; \
source \[file join [list $dir] pkg-part2.tcl\] ; \
namespace ensemble create {...} ; \
package provide Mypackage 1.2.3"
Run Code Online (Sandbox Code Playgroud)
不要在每个子组件中"提供".一旦所有内容成功加载到解释器中,最好提供包,所以我会在文件末尾执行此操作,或者在这种情况下,最后加载完整集.如果您确实希望将每个部分视为子包,则没有理由不将它们声明为子包,并使用需要每个子包的主包.例如:
<main package>
package require Package::part1
package require Package::part2
package provide Package 1.0
<subpackage files>
namespace eval Package {
... stuff ...
}
... more stuff ...
package provide Package::partN 1.0
<pkgIndex.tcl>
package ifneeded Package::part1 1.0 [list source [file join $dir part1.tcl]]
package ifneeded Package::part2 1.0 [list source [file join $dir part2.tcl]]
package ifneeded Package 1.0 [list source [file join $dir package.tcl]]
Run Code Online (Sandbox Code Playgroud)
如果子组件本身可能有用,或者仅将某些部件加载到interp中可能很方便,则此模型非常有用.tcllib SASL程序包执行此操作以避免默认加载某些机制(例如NTLM).
归档时间: |
|
查看次数: |
1486 次 |
最近记录: |