tcl 脚本的内置命令的顺序是否重要?

Does the order of Built-in commands of tcl scripts matter?

我正在使用 tcl 语言并在主 tcl 脚本中对 运行 脚本使用内置命令。 material_qz.tcl 中有一些已定义的参数,get_qzParam.tcl 需要这些参数。即使 get_qzParam.tclmaterial_qz.tcl 之前执行,我也没有收到任何错误。我的问题是执行内置命令的顺序是否重要?

source get_qzParam.tcl;
source material_qz.tcl;

在 Tcl 中定义 proc 或其他命令的顺序无关紧要,只要在执行命令之前定义它们即可。 proc 的主体在第一次调用之前不会被解析。所以你甚至可以把废话放在那里,如果它永远不会被执行也不会受到伤害。

proc documentation {} {
    This proc doesn't contain valid code, but that
    doesn't lead to an error if it is never invoked.
}

因此,如果您的 get_qzParam.tcl 文件仅 定义 使用 material_qz.tcl 中内容的过程,但这些过程直到 [=26= 之后才会被调用] 已加载,然后一切正常。


也可以在 运行 时重新定义命令,然后在下次调用该命令时使用新定义。这是一个非常好的功能,可用于交互式修复 运行ning 程序中的错误。

另一个用途是设置一个命令,它会做一些准备,然后替换自己以备将来使用。例如,这只会在第一次使用时打开一个 sqlite 数据库:

proc db {args} {
    package require sqlite3
    sqlite3 db database.db
    tailcall db {*}$args
}

这里,sqlite3 命令覆盖了 db proc。因此在以后的调用中,将使用该新命令。但这并不影响已经 运行ning 的 db proc,它可以完成它正在做的事情。一个额外的变化是 db proc 在最后调用 db 命令。但这是新的 db 命令。