有人能解释一下【列出源文件】吗?

3

我已经使用Tcl语言2个月了。我有一个问题:什么是[list source file]的意思?我分别理解sourcelist,但当它们放在一起时,我不知道它们的含义。

1个回答

4

这似乎是使用list进行命令脚本构建。我敢打赌,[list source file]的结果随后会与uplevelnamespace eval一起使用。或者甚至是interp eval


list命令生成列表。它还生成无需替换的命令,例如:

eval [list $a $b]

实际上,它的行为与以下内容完全相同

$a $b

在您的情况下,我们使用source而不是$a,并且使用file(我敢肯定不是那么字面意思)而不是$b。为什么这样做呢?这确保了如果文件名中有Tcl元字符(例如{),那么用于源文件的创建脚本在评估时不会出现任何问题。
为什么不直接写source file呢?嗯,最有可能的情况是您想要将source用于当前上下文之外的上下文; source命令将文件读入字符串,然后有效地对该字符串执行立即eval(好吧,有一些细微差别,但与此非常接近)。特别是:
proc foo {} {
    source bar.tcl
}

bar.tcl 的内容在 foo 过程体内运行,就好像你直接在里面输入这些文本一样。变量将是局部变量(除非你使用 global 或类似的东西),等等。坦率地说,大多数人不会写像这样的 Tcl 脚本;为了处理这个问题并在定义的上下文中评估代码,实际上应该编写:

proc foo {} {
    # Quoted to defeat the Stack Overflow syntax highlighter only!
    uplevel "#0" [list source bar.tcl]
}

非常感谢,你说得对,我在它之前使用了一个升级版本:) - undefined
package ifneeded foo 1.0 [list source [file join $dir foo.tcl]] 也是一个例子。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接