Rubyのクロージャ
ふと気になったので、知り合いにRubyのクロージャ関係の機能について聞いたのですが、
- defで定義される普通のメソッド
- メソッド呼び出しの引数の位置で{|x| …}のように書かれ、メソッドの暗黙の引数となって、yieldで呼び出される「ブロック」
- ブロックをfirst-class valueとして保存(new)・適用(call)するためのProcオブジェクト
の3つはすべて別のもの、ということでしょうか。SchemeやStandard MLやOCamlに慣れていると、(lambda (x) …)なりfn x => …なりfun x -> …なり、3つとも同じなので、ちょっと理解に時間がかかってしまいました。想像ですが、クロージャ≠関数、というポリシー?