自动加载提供了两个好处,首先,你可以把有用的过程建立为过程库,而你无需精确知道过程的定义到底在哪个源文件中,自动加载机制会自动替你寻找,第二个好处在于自动加载是非常有效率的,如果没有自动加载机制你将不得不在TCL应用的开头使用source命令来加载所有可能用到的库文件,而应用自动加载机制,应用启动时无需加载任何库文件,而且有些用不到的库文件永远都不会被加载,既缩短了启动时间又节省了内存。
使用自动加载只需简单的按下面三步来做:
第一,在一个目录下创建一组脚本文件作为库,一般这些文件都以".tcl"结尾。
第二步,为自动加载建立索引。启动Tcl应用比如tclsh,调用命令auto_mkindex dir pattern , 第一个参数是目录名,第二个参数是一个模式。
第三步是在应用中设置变量auto_path,把存放了希望使用到的库所在的目录赋给它。
按照这些步骤使用auto_mkindex时发生了错误:missing close-brace。
missing close-brace错误,这个错误的意思是缺少对称的括号{。
关于missing close-brace,转网上的一个贴子:
------------------------------------
今天安装好了expect以后执行脚本出现了missing close-brace错误,这个错误的意思是缺少对称的括号{
后来找到一篇文章,老外的意思也基本类似,我看了我的代码,没发现缺少括号,因为括号我都有高亮显示的,但是就是显示缺少,这时候,我发现一个问题,我得密码里面有一个括号
类似这样
expect “*password:” { send “abc1234{56/r” }
我尝试的将密码改成没有括号的那种,顺利执行了,看来这个老外想表达的就是如果你输入的这个string里面也有括号的话,expect就很傻瓜的把认成代码的部分,去找另一半括号,就报错了,问题就是如此。
-----------------------------------
我在windows里,用auto_mkindex,tclsh,wish都报错:
%auto_mkindex e:/tclexp *.tcl
missing clsose-brace
这个问题解决了,无意中发现的,改成大写的路径就好了:
%auto_mkindex E:/TCLEXP2 *.TCL
或者
%auto_mkindex E:/TCLEXP2 *.TCL
愿意不详。
在linux的tclsh就没有问题
%auto_mkindex /home/tcl *.tcl
%set auto_path [linsert $auto_path 0 /home/tcl] #linsert 记得写0
现在就可以直接用该目录下的过程了。!如果修改了文件或者增减过程,需要重新生成索引。
---------------------------------------------------------------------------------
package
首先在.tcl文件建立package
package provide testp 1.0
把路径加入到auto_path
%lappend auto_path E:/TCLEXP2
建立索引 (这个格式容易出错)
%pkg_mkIndex E:/TCLEXP2 *.tcl
使用包
%package require testp
这样包里的东西就随便使用了
%
本文介绍了TCL自动加载的好处,包括提高效率和简化库文件管理。通过三个步骤实现自动加载:创建脚本库,使用auto_mkindex建立索引,设置auto_path变量。在执行过程中遇到的'missing close-brace'错误通常是因为字符串中含有未配对的括号。在Windows环境下,使用大写路径或避免在密码中使用括号可以解决问题。此外,文章还提到了package的使用和管理。
3505

被折叠的 条评论
为什么被折叠?



