クロージャーとは 上位のローカル変数を参照した入れ子の関数のこと
1.最初に、
counter関数を定義します。この関数は初期値(init)を引数として受け取り、カウント値(count)を保持します。2.次に、
counter関数の内部でincrement関数を定義します。この関数は、countを 1 だけ増加させ、その値を返します。3.increment関数でnonlocalステートメントを使用します。これにより、countという名前の変数は、エンクロージングスコープ(ここではcounter関数)のものであることが示されます。これにより、increment関数からcounter関数のcount変数を変更できます。4.counter関数は、increment関数自体を返します。したがって、counter関数を呼び出すと、実際にはincrement関数が返されます。このincrement関数は、counter関数のcount変数を "覚えて" おり、これがクロージャと呼ばれるものです。5.c1とc2はcounter関数を異なる初期値で呼び出して生成した2つのクロージャです。これらはそれぞれ独立したcount変数を持つため、互いに影響を与えることなくカウントを進めることができます。6.最後に、それぞれのクロージャを呼び出して(
print(c1())およびprint(c2()))、カウント値を増加させて表示します。それぞれの呼び出しで、関連付けられたcount値がインクリメントされます。
コメント