В Swift, насколько я понимаю, замыкания сохраняют свое окружение, а обычные функции - нет.
Рассмотрим f
(возврат функции) и h
(возврат замыкания) ниже. И f()()
, и h()()
возвращают 3
. Почему f()()
не вызывает ошибки выполнения?
func f() -> () -> Int {
let a = 3
func g() -> Int {
return a
}
return g
}
func h() -> () -> Int {
let a = 3
return { () in a }
}
2 ответа
То, что вы написали, не совсем верно, потому что согласно документации :
Глобальные функции - это замыкания, которые имеют имя и не фиксируют никаких значений.
Вложенные функции - это замыкания, которые имеют имя и могут захватывать значения из своей включающей функции.
Выражения замыкания - это безымянные замыкания, написанные в упрощенном синтаксисе, который может захватывать значения из окружающего их контекста.
Song () для захвата значений.
Встроенная функция, такая как g
, сохраняет контекст. На самом деле функции называются замыканиями, или замыкания являются безымянными функциями (какое бы определение вы ни выбрали).
Как указано в документации:
Глобальные и вложенные функции, представленные в разделе "Функции", на самом деле являются частными случаями замыканий.
Похожие вопросы
Новые вопросы
function
Функция (также называемая процедурой, методом, подпрограммой, подпрограммой или макросом) — это часть кода, предназначенная для выполнения одной конкретной задачи. Используйте этот тег для вопросов, которые конкретно связаны с созданием или вызовом функций. Чтобы получить помощь в реализации функции для выполнения задачи, используйте вместо нее [алгоритм] или тег для конкретной задачи. Создавая функцию, логику можно изолировать и вызывать многократно.