关于Tcl源代码的问题

8 tcl

我有一个名为test7.tcl的文件:

namespace eval ::dai {
   variable name "ratzip"
   variable birthday "1982"
   proc hello {} {
      variable name
      variable birthday
      puts "Hello, I am $name birthday is $birthday"
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望以这种方式将此文件源化为另一个名为test8.tcl的文件:

source test7.tcl

::dai::hello
Run Code Online (Sandbox Code Playgroud)

但它给了我错误:无法读取文件"test7.tcl":没有这样的文件或目录

但这两个文件都在同一个文件夹下,发生了什么?

Don*_*ows 11

要获取与当前正在执行的脚本位于同一目录中的文件,请使用以下命令:

source [file join [file dirname [info script]] "test7.tcl"]
Run Code Online (Sandbox Code Playgroud)

请注意,这工作(在你的情况test8.tcl)外脚本中定义的内部程序,因为他们的源完成后通常被称为.如果是这种情况,最简单的解决方法是将info script外部脚本中的变量的输出保存(或者只是立即获取所有文件而不是懒惰以获得最佳方法).


kos*_*tix 5

使用source [file join [file dirname [info script]] test7.tcl]- 这样您就可以通过从执行文件的完整路径名构造的完整路径名来获取目标文件source;无论您在执行期间当前目录是什么,这都将起作用。