我有多个获取来源的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中定义的函数将是,但仍想澄清。
谢谢,
答案 0 :(得分:2)
source
命令立即起作用,好像文件内容出现在source
出现的位置的脚本中(info script
返回的区别除外) 。如果两个脚本都定义了一个过程foobar
,则它将是后一个脚本(在您的情况下为stc_lib.tcl
),它会生成所使用的版本。
但是,如果脚本只定义了不具有重叠名称的过程,并且不会调用它们创建的命令,那么放置source
的顺序通常并不重要。 proc
命令只是创建一个命令;在调用该过程之前,不评估该过程的主体。 (这听起来很明显,但它确实就是这样。代码正是它所说的那样,并且Tcl是关于立即操作语义和注册为响应某些事件而运行的代码。)
请记住,如果您遇到source
粉碎对方的问题,最好考虑将代码放入命名空间或以其他方式找到阻止纠缠事物的方法。不建议编写令人困惑的代码。