我想了解 tcl 中的模块化编程以及我们如何实现这一目标。
在一些 tcl 教程中提到像 source 命令在实现"模块化"方面有一些缺点,因此我们来到"包"之后,"包"有更多的缺点,所以我们带来了包和命名空间的组合。
我想知道 3 个概念的缺点和适当的层次结构是什么. 谁能帮我?
我不确定我是否正确理解了您的问题,所以我将尝试解释您在问题中抛出的 3 个命令:
-
source
: 将文件评估为 Tcl 脚本。它只是打开文件,读取直到EOF字符(在窗口和*nix上^Z
)并对其进行评估。
它不会跟踪源文件,因此您可以再次获取相同的文件(非常适合热修补),但这是缺点:它将再次获取文件。 -
package
:管理包。它基本上跟踪提供的包,并尝试找出加载新包必须获取哪个文件。 -
namespace
:它们为命令和变量提供上下文,因此您不必担心命令的唯一名称。只是命名空间必须是唯一的。与加载包或其他模块无关,它只提供命名空间。
文件,每个包的命名空间等于所有命令所在的包名称。
您应该使用 namespace export
导出公共命令。