我有一个tcl文件,它定义了很少的config procs。我的一个应用程序是在itcl中编写的,它需要为每个对象调用这些配置过程。我无法在itcl中获取全局级别的TCL文件。它只允许在公共方法中采购,但这不是我要找的。我想一次只为所有对象生成tcl文件,然后在程序运行之前使用它。有什么建议吗?
谢谢
发布于 2018-04-29 19:18:18
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退出该框架。大多数情况下,对于正常的代码,差异非常小;请使用您喜欢的代码,因为这两个都是好代码。
https://stackoverflow.com/questions/50082593
复制相似问题