導入:クロージャーについて
昨今ではクロージャーを使えるプログラミング言語は珍しくなくなった。クロージャーとは、関数の引数だけではなく、外のスコープにある変数を参照できる関数のことである。
例えば、次のJavaScriptコードでは、関数を返す関数 f
を定義している。 f
の中で定義された無名関数は、外側の変数 x
を参照できている。
function f(x) {
return function(y) {
return x + y;
};
}
JavaScriptではネストした関数を使わなくても、bind
メソッドによって同等の処理を記述することができる:
function g(x, y) {
return x + y;
}
function f(x) {
return g.bind(null, x); // gの第1引数を束縛する
}
残念ながらC言語にはクロージャーはない。関数の中に関数を書けないからだ。
しかし、クロージャーと同等のこと、つまり関数に追加の引数を渡すことはできないのだろうか?
続きを読む