0

タイトルがこれ以上思いつかなくてごめんなさい。

私の質問は次のとおりです。

ユーザーがスペースを押したときにのみ、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 つのコマンドでグローバルの設定と実行を行うように見えます)。それらは異なる名前空間で同じ仕事をしているように見えますか?

4

1 に答える 1