Scalaさんクロージャ

適当に手を動かしてみる。文書はちゃんと読んでない。

scala> def makeCounter(): ()=>Int = {                              
     | var num = 0                                 
     | def counter(): Int = {                                  
     | num += 1
     | return num
     | }
     | return counter
     | }
makeCounter: ()() => Int

scala> val c1 = makeCounter
c1: () => Int = <function>

scala> val c2 = makeCounter
c2: () => Int = <function>

scala> c1()
res31: Int = 1

scala> c2()
res32: Int = 1

scala> c1()
res33: Int = 2

scala> c1()
res34: Int = 3

scala> c2()
res35: Int = 2

おもしろい。あと、Javaのライブラリにはそれなりに慣れてるから、便利に使えそうだ。

test