タイトルがこれ以上思いつかなくてごめんなさい。
私の質問は次のとおりです。
ユーザーがスペースを押したときにのみ、proc内の変数を変更しようとしています。proc は after でループするため、ユーザーが複数回スペースを押したい場合は、変数がインクリメントされます。
私が知っていることは次のとおりです。
これには多くの方法があります。proc内で変数を渡すことができます。変数をglobalまたはupvarにリンクできます。また、名前空間にある場合は、変数を使用できます。しかし、私でうまくいくように見えるのはグローバルだけです。グローバルがリンクを作成しているからだと感じていますが、それが本当なら変数も機能するはずですよね?
ここに私のテストコード:
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 を使用し、名前空間では variable を使用するのはなぜですか (1 つのコマンドでグローバルの設定と実行を行うように見えます)。それらは異なる名前空間で同じ仕事をしているように見えますか?