我已经使用Tcl语言2个月了。我有一个问题:[list source file]
是什么意思?我分别理解source
和list
,但我不明白它们组合在一起意味着什么。
答案 0 :(得分:3)
这似乎是使用list
来执行命令脚本构建。我敢打赌,[list source file]
的结果会与uplevel
或namespace 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
}
将在foo的过程体中运行bar.tcl
的内容,就像您直接在其中键入文本一样。变量将是局部变量(除非您使用global
或类似的东西)等等。坦率地说,大多数人都不会写那些喜欢这种处理的Tcl脚本;为了处理这个问题,并在定义的上下文中对代码进行评估,你实际上写了:
proc foo {} {
# Quoted to defeat the Stack Overflow syntax highlighter only!
uplevel "#0" [list source bar.tcl]
}