我有一个 tcl 文件,其中定义了很少的配置过程。我的一个应用程序是在 itcl 中编码的,它需要为每个对象调用这些配置过程。我无法在 itcl 的全局级别获取 TCL 文件。它只允许在公共方法中采购,但这不是我想要的。我想一次只为所有对象获取 tcl 文件,然后使用它直到程序运行。请问有什么建议吗?
谢谢
该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
;如果一切都是字面意思,那么最好使用带括号的版本。
with 的版本与 withuplevel #0
的版本不同,namespace eval ::
前者将堆栈提升到全局级别,而后者只是将一个新的堆栈帧推出,您可以将其uplevel
推出。大多数时候,使用健全的代码,差异非常小。使用您喜欢的一个,因为两者都是很好的代码。