我在理解以下命令时遇到了一点小问题:
package ifneeded HelloWorld 1.0 [list source [file join $dir helloworld.tcl]]在pkgIndex.tcl中,我理解当pkgIndex.tcl被获取时,例如,我们包需要HelloWorld 1.0时,helloworld.tcl将被获取。我不明白列表命令..。
发布于 2012-08-08 09:01:10
包(如果需要命令期待 ),输入如下:
package ifneeded package version ?script?您可以看到,在您的示例中,包是HelloWorld,版本是1.0。最后,脚本是[list源文件join $dir helloworld.tcl]。使用 list 的原因是脚本参数需要一个列表。
发布于 2012-08-08 10:40:47
package ifneeded命令期望脚本作为它的最后一个参数。脚本被期望(在常识中)是格式良好的,也就是说,可以被Tcl解析器解析。
在这个相当标准的pkgIndex.tcl中,需要确保的是:无论在处理来自pkgIndex.tcl的代码时"dir“变量包含什么内容,脚本都应该以这样的方式构造,以便以后Tcl解析器可以在其中看到带有一个参数的source命令--不管$dir是否扩展到包含空格或{等时髦字符。
输入list命令。在这里,它用于构造一个包含两个元素的列表:字符串"source“和包含文件名的字符串(用作该source命令的唯一参数)。现在,当该列表被解释为一个脚本(一个字符串)时,Tcl确保字符串表示包含所有必要的引用,以消除空白等方面的任何歧义。这确保了当解析器稍后解释我们构建的脚本时,其中的source命令将完全接收一个参数。
您可以阅读更多关于使用list防止引用问题的更好的书面信息,这里。
https://stackoverflow.com/questions/11860631
复制相似问题