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
 */