こんばんは、世界。
この前学習したfunctionのnestについてなんかわからないんだけど何がわからないのかわからない状態でモヤモヤしてたのでもう一回考えてみようと思います。
検索して出てきた情報もかいつまみながらやってみます。
func makeIncrementer() -> ((Int) -> Int)
{
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
モヤモヤコードはこれですね。
最後の行の"increment(7)"で変数をあたかも関数のように扱ってますね。
その一個上の行で"var increment = makeIncrementer()"と書いてfunctionである"makeIncrementer"を変数"increment"に代入していますね。
この時、"increment"の型を明示すると"var increment: (Int) -> Int; makeIncrementer()"となるらしいです。
ぼくがこのコードで一番難解だと思ったのは"((Int) -> Int)"の部分です。
これって"func makeIncrementer()"の中にある"func addOne(number: Int) -> Int"が"func makeIncrementer"に返す値の型が(Int) -> Intだから"makeIncrementer"に返ってくる値も"((Int) -> Int)"になっているのかなと思いましたけどなんかあんまり腑に落ちないですね。
もう少し腑に落ちる答えを考えて探してみたいと思います。