在全球范围内的itcl代码中获取tcl文件

时间:2018-04-29 01:31:47

标签: tcl itcl

我有一个tcl文件,它定义了很少的配置文件。我的一个应用程序在itcl中编码,需要为每个对象调用这些配置proc。我无法在itcl的全局级别上获取TCL文件。它只允许在公共方法中采购,但这不是我想要的。我想立即为所有对象获取tcl文件,然后使用它直到程序运行。 有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:0)

source命令始终评估当前级别的文件内容;它实际上只是将文件的内容读入一个字符串然后eval(除了info script的一点点诡计)。这意味着如果你想在全局上下文中source一个文件,你应该做以下其中一个:

# Quotes around #0 just because of Stack Overflow's highlighting
uplevel "#0" {
    source thefile.tcl
}
uplevel "#0" [list source $thefile]
namespace eval :: {
    source thefile.tcl
}
namespace eval :: [list source $thefile]

list版本正在进行代码生成,当文件名在变量中时(或由file join之类的命令生成),它会更好用;如果一切都是文字的,那么你最好使用支撑版本。

uplevel #0版本与namespace eval ::版本不同,前者将向上堆栈升级到全局级别,而后者只是推送新堆栈您可以uplevel的框架。大多数时候,使用合理的代码,差异非常小;使用你喜欢的那个,因为两者都是好的代码。