[ruby] クロージャ
最近は週に2回、取引先に常駐しているので電車で通勤というものを経験している。通学通勤は近いところばかりで、少し遠くても自転車の経験しかないため、ほぼ初めてに近いw*1
そんな通勤時間に何をしているかというとプログラミング言語 ruby を読み進めたりしてる。そして帰宅してから、読んだところのコードを実行してみたり。
lambda で n 閉じこめ
def increment(n) lambda { n += 1 } end hoge = increment(3) hoge.call #=> 4 hoge.call #=> 5 hoge.call #=> 6
Proc で n 閉じこめ
def increment2(n) Proc.new { n += 1 } end fuga = increment2(3) fuga.call #=> 4 fuga.call #=> 5 fuga.call #=> 6
n 共有したクロージャ
def increment_and_reset(n) m = n incr = lambda { n += 1 } reset = lambda { n = m } [incr, reset] end incr, reset = increment_and_reset(5) incr.call #=> 6 incr.call #=> 7 reset.call #=> 5 incr.call #=> 6 incr.call #=> 7 reset.call #=> 5
クロージャは perl でもかなりあとになって理解したせいか、クロージャがわかるとその言語をつかんだ気になってくる。
まぁ、lambda と Proc の違いが曖昧なんだけども。
*1:初めて入った会社も電車通勤だったけど、まぁ、時間が定まってなかったので。