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

问题描述 投票:0回答:1

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

source get_qzParam.tcl;
source material_qz.tcl;
tcl built-in
1个回答
2
投票

只要在执行命令之前就已定义了proc或其他命令,在Tcl中定义顺序就没有关系。在第一次调用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文件defines使用material_qz.tcl中的东西的proc,但是直到加载material_qz.tcl之后才调用这些proc,那么一切都将正常工作。


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

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

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

这里,sqlite3命令将覆盖db proc。因此,在将来的调用中,将使用该新命令。但这不会影响已经在运行的db proc,它可以完成其工作。另一个缺点是db proc会在最后调用db命令。但这是新的db命令。

© www.soinside.com 2019 - 2024. All rights reserved.