Tcl中的静态变量

时间:2011-05-25 10:08:38

标签: static tcl

是否可以在Tcl中声明静态变量?
我使用某个函数来捕获未知的命令错误,我希望它在第一次出现未知命令时打印错误消息 - 所以我需要在proc内保留类似静态列表的内容。这可能吗?

4 个答案:

答案 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