Как работает функция, которая возвращает функцию? - PullRequest
0 голосов
/ 16 июня 2019

Я читаю книгу Apple о Swift и наткнулся на этот кусок кода, который я после многих попыток не мог понять. Насколько я понимаю, эта функция возвращает функцию. Две последние строки кода, а также весь код, однако, совершенно сбивают с толку. И как мы можем назначить функцию переменной (седьмая строка)? Спасибо.

Я сам набрал его на игровой площадке, но все еще не понимаю.

func makeIncrement () -> ((Int) -> Int){
    func addOne (number: Int) -> Int{
        return 1 + number
    }
    return addOne
}
var increment = makeIncrement()
increment(7)

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Функции можно считать объектами в Swift (или как функции первого класса - заслуживающие изучения).Поэтому может быть назначен переменным и свойствам объекта.

Таким образом, в вашем коде makeIncrement просто возвращает функцию addOne в качестве переменной.

var increment = makeIncrement() можно просто рассматривать как присвоениевозвращаемая функция из makeIncrement в качестве переменной (или объекта функции) increment.

Затем мы можем свободно вызывать функцию increment, как если бы мы действительно вызывали addOne или любую другую функцию.

0 голосов
/ 16 июня 2019

Функция - это что-то с необязательным вводом и типом возврата. Если вы нажмете alt-клик на переменную increment, вы увидите, что приращение имеет тип ((Int) -> Int). Это означает, что вы можете ввести Int и вернуть Int. Затем это делается в последней строке, вызывая эту функцию.

Если вы знаете объектно-ориентированное программирование, вы будете знать, что вы всегда можете передавать объекты, которые также имеют функции. Таким образом, в вашем коде он делает то же самое, но теперь мы опускаем объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...