クロージャー

関数内で定義されたラムダやローカル関数は、外側の関数のローカル変数にアクセスできる。

クロージャーにより、外部からはアクセスできない
ローカルメソッドを作成することができる。

// 関数の外側からは、ローカル変数にはアクセスできない
//fun outer(){
//    count += 1000
//}
 
fun main(){
 
    var count=0
 
    // ラムダは、宣言されている関数のローカル変数にアクセスできる。
    val ints = listOf(1,2,3)
    ints.forEach{
        count += it
    }
    println(count)
>>> 6    
 
    // 無名関数は、宣言されている関数のローカル変数にアクセスできる。
    val function =fun(){
        count += 10
    }
    function()
    println(count)
>>> 16
 
    // 内部関数は、宣言されている関数のローカル変数にアクセスできる。
    fun inner(){
        count += 100
    }
    inner()
    println(count)
>>> 116
}