多次包含源时TCL崩溃

时间:2013-02-22 07:01:41

标签: tcl

我有一个receive.tcl脚本,它只包含单个proc,包含一些1KLOC

puts "DEBUG_1"
proc Receive { arg1 arg2} {
puts "DEBUG_2"
... TCL Code
}
puts "DEBUG_3"

现在我需要在这么多不同的脚本中使用这个proc接收; 让我们说; 1.tcl 2.tcl 3.tcl等等,所有这些1.tcl 2.tcl都是从主人(Master.tcl)调用的。

是否有必要在每个source PATH/receive.tcl 1.tcl中包含/写2.tcl等等;使用Receive

OR

我可以从一些Master(Master.tcl)脚本调用“source PATH / receive.tcl”,它可以在任何1.tcl 2.tcl中进一步使用,依此类推而不另行包含任何内容;将TCL解释器存储/记住此proc接收并可以在任何其他脚本中使用吗?

问题:当我在每个$PATH/receive.tcl 1.tcl中“2.tcl来源,而不是Master.tcl; Master.tcl包含source $PATH/1.tcl source $PATH/2.tcl等等;然后我正在执行Master.tcl

  1. 在第一次迭代中1.tcl成功执行;
  2. 口译员将进入receive.tcl;正在打印DEBUG_1DEBUG_3proc Receive已成功使用1.tcl
  3. 但是当口译员转到2.tcl时,它会找到source $PATH/receive.tcl
  4. 口译员转到receive.tcl
  5. 和TCL一次又一次地崩溃;意味着我只能看到DEBUG_1;之后的分段错误。

1 个答案:

答案 0 :(得分:2)

好的,先说几件事:Tcl不应该崩溃(如果你不使用任何第三方dll)。如果是,请考虑creating a bug report

1kloc对我来说听起来很糟糕,也许其他更好的东西。我认为你试图解析一些输入并调用不同的东西,如果是这种情况,请看一下interp,这是我在Tcl中最喜欢的宝石之一。

回答您的问题: 您可以在主服务器中获取文件,并从以后获取的其他文件中使用它。

在您的情况下(其他文件要调用该文件的唯一目的),您可以创建一个包。创建包时最大的问题是决定安装包的位置(使用TCL_LIBRARY环境变量,在$auto_path中选择一个目录,将文件夹添加到代码中的$auto_path。查看Tcl Tutorial以供参考。