我试过这个:
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=
原因是:它进入else条件,然后无法访问存储在svcCallWithOneChar中的结果。
如果您在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
。