func内の変数保持について(クロージャーの理解)
クロージャーの理解に苦慮しています。
以下にサンプルプログラムを添付します。swiftプログラムです。
動作については理解していますが、関数(func)内の関数で、内部の関数はその外の変数にアクセス可能というクロージャーの理解はしています。疑問点は以下の通りです。
let inc = makeIncrementer(10, 5)
によって、incの定数に"15"が設定されますよね。
inc() // 15
で、inc()とは何?という疑問があります。またinc()を繰り返す度に5が足されるのか、makeIncrementerのaddValueの値が5を足されると思いますが、var vがなぜ値を保持しているのかも疑問です。
何か理解が間違っていると思いますので、教えていただけないでしょうか?質問を端的に言うとinc()とは何?ということです。
以下、リストを添付します。よろしくお願いします。
func makeIncrementer(initValue: Int, addValue: Int) -> () -> Int {
var v = initValue
func incrementer() -> Int {
v += addValue
return v
}
return incrementer
}
let inc = makeIncrementer(10, 5)
inc() // 15
inc() // 20
inc() // 25