(2006.1.28の日記を修正、加筆。) (2006.10.8 新規公開。) Rubyの生産性の高さの理由のひとつクロージャ (closure; 閉包) と、関数・クロージャの単位で再利用できるようにするカリー化について。 コールバック関数 Rubyの話のまえに、クロージャのないC/C++で関数を再利用する方法、その問題点を見ていく。 まずは、単純なコールバックについて。コールバックといえばqsort()関数。引数として二つの値を比較する関数を渡す。 #include <stdlib.h> #include <stdio.h> int compare(const void* a, const void* b) { return *(const int*)a - *(const int*)b; } int main() { int a[] = {3, 4, 1, 2}; int i; qs