任何人都可以解释我[列表源文件]?

时间:2014-07-03 08:43:42

标签: list tcl

我已经使用Tcl语言2个月了。我有一个问题:[list source file]是什么意思?我分别理解sourcelist,但我不明白它们组合在一起意味着什么。

1 个答案:

答案 0 :(得分:3)

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


list命令生成列表。它还使得无替换命令成为:

eval [list $a $b]

在行为中实际上相同

$a $b

在您的情况下,我们有source而不是$afile(我不是那个文字的强大赔率)而不是$b 。我们为什么要这样做?好吧,它确保如果文件名中包含Tcl元字符(例如,{),则在评估时,创建的用于获取文件的脚本根本没有任何问题。

为什么你不直接写source file?那么,最可能的情况是你希望source进入除当前情况之外的上下文; source命令将文件读入一个字符串,然后在该字符串上有效地立即eval(好吧,有一些细微差别,但它非常接近于此)。特别是:

proc foo {} {
    source bar.tcl
}

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

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