包里面需要pkgIndex

时间:2016-09-15 07:00:39

标签: tcl

最近我发现,如果使用不存在的包名称评估package require,并且auto_path中的一个pkgIndex文件再次包含package require而不包含现有包,那么tclPkgUnknown将进入无限递归。 我想知道是不允许从pkgIndex中获取eval包需求还是这是一个隐藏的bug?

1 个答案:

答案 0 :(得分:1)

pkgIndex.tcl文件永远不应运行package require。它应该只调用package ifneeded告诉包管理系统如何加载特定包的特定版本。这是因为索引脚本在包发现期间有时会被加载 - 而不一定是在真正需要该版本的包时。如果你坚持这个规则,你就不会有任何问题。

这里应该有那种东西。

# Maybe some comments here?
package ifneeded Foo 1.2.3 [list source [file join $dir foo.1-2-3.tcl]]

$dir?为方便起见,这只是包含索引文件的目录的名称。 (它实际上也是一个局部变量;索引文件在里面一个过程上下文中进行评估。)