質問: makeIncrementer() increment(7) ``` これを実行することによって、makeIncrementerをよんでいます。 なぜ、このような挙動になるのでしょうか? makeIncrementerは引数を持てない木がするのですが、 var incrementに代入することで、引数を持てるようになっています。 特にこの場所が一体何をしているのかわからないです。。 ((Int) -> Int) 基本的な質問かとは思いますがよろしくお願いします。
回答: 関数を返す関数ですね。 関数内の関数 ``` func addOne(number: Int) -> Int { return 1 + number } ``` が”値”として返ってきます。 その値(関数)が変数`increment`に入っています。 `increment`の型を明示すれば ``` var increment: (Int) -> Int = makeIncrementer() ``` となります。 `Int`を引数に取り`Int`を返す関数という意味になります。 カッコの中の`Int`が関数の引数、 -> の後の`Int`が関数の返値です。 addOne関数の引数と返値に対応しているのが分かりますか? `makeIncrementer`関数はこの`(Int) -> Int`である関数を返す関数であるため ``` func makeIncrementer() -> ((Int) -> Int) { ``` となります。 `((Int) -> Int)`の外側のカッコは不要なのですが、カッコを外してしまうと初めての方にはわかりづらくなるため、あえてカッコを残してあるのだと思います。 上の説明通り、変数`increment`に関数が入っているため`increment`自体が関数のようにふるまうのです。