是否有 Tcl 包初始化程序?

Is there a Tcl package init procedure?

有没有办法定义在加载 Tcl 包时自动调用的初始化过程?

在这种情况下,我需要解析一个配置文件并设置一个命名空间变量。

我最初在名称空间中有代码,在 proc 之外,但是 pkg_mkIndex 试图在获取文件时执行代码并抛出错误 "while sourcing"。包文件源来自 tclsh,我不确定为什么它不会在 pkg_mkIndex.

内这样做

为了 pkg_mkIndex 的缘故,我可以注释掉 init 例程,如果这是这样做的正确方法,但我想知道是否有一种内置的方法可以自动执行 init 过程,a la C 的 main().

but I wondered if there's a built-in way to have init procedures executed automatically

提供初始化脚本作为 package ifneeded 脚本的一部分是常见的做法,例如:

package ifneeded mypkg 1.0.0 "source [list [file join $dir mypkg.tcl]]; source [list [file join $dir myinit.tcl]]"

事实证明,使用 pkg_mkIndex 对任何事情都没有特别的帮助 non-trivial,因为它试图(部分)评估源文件及其所有依赖项。更好地手工制作 pkgIndex.tcl 脚本并分离关注点(pkg 定义、pkg 初始化;见上文)。