好的,我想我知道问题可能出在哪里。这auto_path
是一个Tcl 目录列表——使用它的代码在列表中迭代foreach
——用于搜索包(和自动加载的脚本,我认为这是一种旧机制,它比它的价值更麻烦)。然而,您使用的是单个元素,即file join
. 这在 Windows 以外的平台上通常无关紧要,因为目录分隔符在/
那里(这只是 Tcl 的普通非空白字符),但在 Windows 上,目录分隔符是\
Tcl 的列表元语法字符。
这是什么意思?好吧,之后:
set ::auto_path [file join {C:\Tcl\lib}]
我们可以问那个清单上的东西是什么。例如,我们可以打印列表的第一个元素……</p>
puts [lindex $::auto_path 0]
那输出什么?大概是这样的:
C:Tcllib
哎呀!反斜杠被视为引用字符,留下了一个完全不起作用的路径。那是行不通的。
解决方法是使用不同的方式来构建auto_path
. 我想你会发现这正是你真正想要的:
set ::auto_path [list {C:\Tcl\lib}]
尽管这是一种替代方法(仍在使用list
; 在所有情况下,它都是无故障列表构造的最佳选择):
set ::auto_path [list [file normalize {C:\Tcl\lib}]]
(我敢打赌,您正试图将其file join
用作 ghetto file normalize
。不要那样做。很长一段时间以来,这一直是不好的做法,尤其是现在我们有一个实际上可以执行您想要的操作的命令。)