是否可以在Tcl中聲明一個靜態變量?
我使用某個函數來捕獲未知的命令錯誤,並且我希望它在未知命令的第一次出現時打印錯誤消息 - 所以我需要在proc
內保留類似靜態列表的東西。那可能嗎?Tcl中的靜態變量
6
A
回答
4
或者你也可以只使用一個直全局變量:
set varList {}
proc useCount {value} {
global varList ;
lappend varList $value
}
useCount One
useCount Two
puts $varList
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
Tcl的做不支持靜態變量。除了在名稱空間內使用全局變量或變量外,另一種選擇是將您的過程作爲類中的方法實現(請參見[incr tcl]或snit)。如果你必須實現靜態變量,Tcl的wiki有一個網頁,其中討論這個問題:http://wiki.tcl.tk/1532
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
相關問題
- 1. 靜態類中的靜態變量和非靜態類中的靜態變量
- 2. 靜態函數中的靜態變量?
- 3. PHP:引用靜態變量中的另一個靜態變量
- 4. 全局靜態變量vs函數中的靜態變量?
- 5. 同一類中的Java靜態變量和非靜態變量
- 6. PHP中的靜態變量變量
- 7. C++中的靜態變量
- 8. PHP中的靜態變量
- 9. WCF中的靜態變量
- 10. ObjectiveC中的靜態變量
- 11. TSQL中的靜態變量?
- 12. CodeIgniter中的靜態變量
- 13. R中的靜態變量
- 14. DotNet:DLL中的靜態變量
- 15. Java中的靜態變量?
- 16. VBScript中的靜態變量
- 17. Monodroid中的靜態變量
- 18. ruby中的靜態變量
- 19. Java中的靜態變量
- 20. Python中的靜態變量?
- 21. asp.net中的靜態變量?
- 22. C中的靜態變量
- 23. asp.net中的靜態變量
- 24. ASP.NET中的靜態變量
- 25. Android中的靜態變量
- 26. 靜態變量
- 27. 靜態變量
- 28. 靜態變量
- 29. 靜態變量
- 30. 靜態變量
更新:另請參閱http://wiki.tcl.tk/memoizing for a general idea – kostix 2011-05-25 12:10:40