0

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

谢谢

4

1 回答 1

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;如果一切都是字面意思,那么最好使用带括号的版本。

with 的版本与 withuplevel #0的版本不同,namespace eval ::前者将堆栈提升到全局级别,而后者只是将一个新的堆栈帧推出,您可以将其uplevel推出。大多数时候,使用健全的代码,差异非常小。使用您喜欢的一个,因为两者都是很好的代码。

于 2018-04-29T11:18:18.233 回答