我正在使用tcl语言并使用内置命令在主要tcl脚本中运行脚本。 material_qz.tcl
中需要一些get_qzParam.tcl
中定义的参数。即使get_qzParam.tcl
在material_qz.tcl
之前执行,我也没有收到任何错误。我的问题是执行内置命令的顺序是否重要?
source get_qzParam.tcl;
source material_qz.tcl;
答案 0 :(得分:2)
在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中的东西的proc,但是直到加载material_qz.tcl之后才调用这些proc,那么一切都将正常工作。 / p>
还可以在运行时重新定义命令,然后在下次调用该命令时使用该新定义。这是一个非常好的功能,可用于交互式地修复正在运行的程序中的错误。
另一种用途是设置一个命令,该命令将做一些准备,然后替换自身以备将来使用。例如,这只会在首次使用时打开sqlite数据库:
proc db {args} {
package require sqlite3
sqlite3 db database.db
tailcall db {*}$args
}
在此,sqlite3命令将覆盖db proc。因此,在将来的调用中,将使用该新命令。但这不会影响已经在运行的db proc,它可以完成其工作。另一个缺点是db proc会在最后调用db命令。但这是新的db命令。