fun useClosure2(x: Int): (Int) -> Int { // x = 100(200) のままで使われる. // 変数 z/zz に、保存されている. // 変数num の、値も、同様に、変数 z/zz に、保存されている! var num = 0 /* val useFun: (Int) -> Int = fun(y: Int): Int { return x + y + (++num * ++num) } */ // val useFun = {y: Int -> x + y + (++num * ++ num)} // IntelliJ が、inlineにして欲しいというので、考えました。 // 多分、コピーすると、それが、オーバーヘッド になり、実行速度が落ちる ということ? return { y: Int -> x + y + (++num * ++num) } } fun main() { // z は、useFun(y : Int) の、y: Int を、使うが、 // あくまで、useClosure(100) である. val z = useClosure2(100) println(z(6)) // num: 1, 2 -> 100 + 6 + 2 println(z(7)) // num: 3, 4 -> 100 + 7 + 12 println(z(8)) // num: 5, 6 -> 100 + 8 + 30 println("") val zz = useClosure2(200) println(zz(6)) println(zz(7)) println(zz(8)) } /* 108 119 138 208 219 238 */