Закрытие из-за того, что он может сделать или потому что он делает
Хорошо, это немного педантичный вопрос, но я хотел бы убедиться, что правильно понимаю определение. Модификатор закрытия используется для описания анонимных функций, которые может поднимать переменные в локальной области (независимо от того, делают они это на самом деле или нет) или только когда они делают лифтинг переменных в локальной области?
Другими словами, если анонимная функция имеет способность, чтобы поднять переменные в своей локальной области (поскольку язык предлагает эту возможность), но не делает это, он все еще считается закрытием?
Я понимаю, что это закрытие только при снятии локальных переменных. Но анонимная функция, которая не делает (даже если это возможно), не является закрытием. Таким образом, не все анонимные функции являются закрытием, но все блокировки являются анонимными функциями.
Снова, извините за педантизм, но эти вещи грызют меня.:)
Ответы
Ответ 1
Предполагая, что вы имеете в виду в контексте информатики...
Закрытие - это функция первого класса, которая фиксирует лексические привязки свободных переменных в своей определяющей среде. Как только он захватил лексические привязки, функция становится замыканием, потому что она "закрывает" эти переменные.
Обратите внимание, что закрытие существует только во время выполнения.
Для функции, являющейся замыканием, ортогонально функции, анонимной или именованной. Вы можете создать язык, который позволяет вам определять именованные функции как замыкания.
Здесь находится "именованное" закрытие в Python:
def maker():
count=[0]
def counter():
count[0]=count[0]+1
return count[0]
return counter
Ответ 2
Здесь определено одно большое определение замыкания:
lua.org
Когда функция записывается в другую функцию, она имеет полный доступ к локальным переменным из закрывающей функции; эта функция называется лексическим охватом. Хотя это может показаться очевидным, это не так. Лексическая область обзора, плюс первоклассные функции, является мощной концепцией на языке программирования, но несколько языков поддерживают эту концепцию.