是否可以在Tcl中声明静态变量?
我使用某个函数来捕获未知的命令错误,我希望它在第一次出现未知命令时打印错误消息 - 所以我需要在proc
内保留类似静态列表的内容。这可能吗?
答案 0 :(得分:4)
或者您可以使用直接的全局变量:
set varList {}
proc useCount {value} {
global varList ;
lappend varList $value
}
useCount One
useCount Two
puts $varList
答案 1 :(得分:2)
没有。但是您可以使用由proc名称索引的全局(通常是命名空间的)数组,例如:
namespace eval foo {
variable statics
array set statics {}
}
...
proc ::foo::bar args {
variable statics
upvar 0 statics([lindex [info level 0] 0]) myvar
# use myvar
}
答案 2 :(得分:2)
Tcl不支持静态变量。而不是在命名空间内使用全局变量或变量,另一种方法是将您的过程实现为类中的方法(请参阅[incr tcl]或snit)。如果必须实现静态变量,则Tcl wiki有一个讨论此问题的页面:http://wiki.tcl.tk/1532
答案 3 :(得分:0)
由于我不喜欢全局变量(除非你有一个小脚本),我结合@kostix和@Jackson的解决方案:
namespace eval foo {
variable varList {}
}
proc foo::useCount {value} {
variable varList
lappend varList $value
}
foo::useCount One
foo::useCount Two
puts $foo::varList