抱歉标题想不出更好的了。
这是我的问题:
我试图仅在用户点击空格时更改 proc 内的变量。proc 使用 after 循环,因此如果用户希望更多地点击空间,那么一旦变量将增加。
以下是我所知道的:
有很多方法可以解决这个问题。您可以在 proc 中传递变量,您可以将变量与 global 或 upvar 链接和/或如果您在命名空间中,那么您可以使用变量。但似乎与我合作的唯一一个是全球性的。我有一种感觉,这是因为 global 建立了一个链接,但如果那是真的,那么变量也应该起作用,对吧?
这是我的测试代码:
proc test1 {} {
global testing
bind . <Key-a> {incr testing}
puts $testing
puts "test2"
after 100 test2
}
namespace eval test2 {
variable testing 0
namespace export {[a-z]*}
proc of1 {} {
variable testing
bind . <Key-a> {incr testing}
puts $testing
after 100 test3::of1
}
}
proc test3 {testing} {
bind . <Key-a> {incr testing}
puts $testing
puts "test4"
after 100 test4 $testing
}
set testing 0
#test1
test2::of1
#test3 0
grid .c
附带问题:
为什么在全局命名空间中我们使用 set 和 global 而在命名空间中我们使用变量(似乎在一个命令中设置和执行全局)。他们似乎在不同的命名空间做同样的工作?