クロージャを使ったカウンター

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 - Qiita
を見ていたら、クロージャを使っておもしろい仕方でカウンターが作れることを知った。

元のコードは JavaScript のようであるが、Ruby だとこんな感じ。

$ pry
[1] pry(main)> counter = ->{
[1] pry(main)*   count = 0
[1] pry(main)*   ->{count += 1}
[1] pry(main)* }.call  
=> #<Proc:0x005594b3626450@(pry):3 (lambda)>
[2] pry(main)> counter.call
=> 1
[3] pry(main)> counter.call
=> 2
[4] pry(main)> counter.call
=> 3

おもしろいですよね。呼び出すごとに確かに 1 ずつ増えていくな。
ちなみに、変数 counter に入っているのは Proc オブジェクト ->{count += 1} です。


こんな記事もあります。ここでもクロージャを使ってカウントしていますね。
obelisk.hatenablog.com