我已经尝试过了:
global svcCallWithOneChar ""
if {[catch {set "svcCallWithOneChar = [mimic.list :prefix \"l\"]"} errmsg]} {
puts $errmsg
} else {
puts "###### Svc Call With prefix set to Single Char \n $svcCallWithOneChar \n ##################"
}
但是会产生此错误
无法读取“ svcCallWithOneChar =
原因是:转到其他条件,然后无法访问存储在svcCallWithOneChar中的结果。
答案 0 :(得分:3)
如果您正在Tcl中进行面向对象的编程,则有几种选择。在TclOO中,您可以这样定义一个实例变量:
oo::class create Foo {
variable thevariable
...
}
现在thevariable
类的所有实例中的所有方法中都可以访问变量Foo
。
至于您的示例代码,我真的无法弄清楚您正在尝试做什么。不过,有几点注意事项:
global
命令的参数是要在全局范围和当前范围之间链接的变量名称。您的调用(如果在过程内)将创建两个局部变量:svcCallWithOneChar
和“”(是,这是合法变量名称)。
调用set "svcCallWithOneChar = [mimic.list :prefix \"l\"]"
不是赋值。它是set
的单参数形式,因此它尝试访问名为svcCallWithOneChar = foo
的变量的值(如果foo
是mimic.list :prefix \"l\"
调用的返回值)。如果后面的调用导致空字符串,则变量名将变为svcCallWithOneChar =
,这恰好是您的错误消息所说的。
此外,即使在双引号引起来的字符串中调用mimic.list :prefix \"l\"
,括号中的文本也不是字符串的一部分(但是,调用的结果将逐字嵌入到字符串中)。因此,在mimic.list
的第二个参数中转义双引号意味着该命令将获得参数"l"
,而不是l
。