tcl文件的函数定义和源代码排序

tcl文件的函数定义和源代码排序,tcl,Tcl,我有多个tcl文件正在获取源代码 source fg_lib.tcl source stc_lib.tcl 在stc_lib.tcl中,有一个函数仅在fg_lib.tcl中定义。我是否可以假设,由于fg_lib.tcl正在获取源代码,因此该函数将自动可用于stc_lib.tcl 还有一个问题:如果在两个tcl文件中都定义了某个函数,根据上述源代码的顺序,将执行哪个版本的函数?我认为stc_lib.tcl中定义的函数将是,但仍希望澄清 谢谢,命令source立即起作用,就好像

我有多个tcl文件正在获取源代码

     source fg_lib.tcl
     source stc_lib.tcl
在stc_lib.tcl中,有一个函数仅在fg_lib.tcl中定义。我是否可以假设,由于fg_lib.tcl正在获取源代码,因此该函数将自动可用于stc_lib.tcl

还有一个问题:如果在两个tcl文件中都定义了某个函数,根据上述源代码的顺序,将执行哪个版本的函数?我认为stc_lib.tcl中定义的函数将是,但仍希望澄清


谢谢,

命令
source
立即起作用,就好像文件的内容在脚本中出现
source
的位置一样(除了
info script
返回的内容不同)。如果两个脚本都定义了一个过程
foobar
,则生成所用版本的将是后面的脚本(
stc_lib.tcl

但是,如果脚本只是定义没有重叠名称的过程,并且没有调用它们创建的命令,那么
源代码的放置顺序通常并不重要。
proc
命令只是创建一个命令;在调用过程之前,不会对过程体进行求值。(这听起来很明显,但实际上是完全一样的。代码就是它所说的,而Tcl就是关于即时操作语义和注册为响应某个事件而运行的代码。)


请记住,如果您在
源代码方面遇到问题,那么最好将代码放入名称空间,或者找到一种方法停止纠缠。不建议编写容易混淆的代码。

因为stc_lib.tcl依赖于fg_lib.tcl,所以它应该源于fg_lib.tcl。当然,因为您不想两次作为源文件,所以应该查看
package-provide
package-require
。随着项目变得越来越大,您不想试图记住文件的来源顺序。