我有一个tcl文件,它定义了很少的配置文件。我的一个应用程序在itcl中编码,需要为每个对象调用这些配置proc。我无法在itcl的全局级别上获取TCL文件。它只允许在公共方法中采购,但这不是我想要的。我想立即为所有对象获取tcl文件,然后使用它直到程序运行。 有什么建议吗?
谢谢
答案 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
的框架。大多数时候,使用合理的代码,差异非常小;使用你喜欢的那个,因为两者都是好的代码。