сборник объяснений закрытия ниже. для меня, один из «тигра книги» удовлетворяет меня больше всего ... метафорические те также помогает много, но только после того, как encounterred этого ...
- окончания: в теории множеств, замыкание есть (наималейший), на котором некоторые операции дают результаты, также принадлежит множеству, поэтому это своего рода «наименьшее закрытое общество при определенных операциях».
a) sicp: в абстрактной алгебре, где набор элементов называется замкнутым под действием, если применение операции к элементам в наборе вызывает элемент, который снова является элементом множества.Сообщество Lisp также (к сожалению) использует слово «закрытие» для описания совершенно несвязанной концепции: закрытие представляет собой метод реализации для представления процедур со свободными переменными.
b) wiki: замыкание является функцией первого класса, которая фиксирует лексические привязки свободных переменных в определяющей среде. Как только он захватил лексические привязки, функция становится замыканием, потому что она «закрывает» эти переменные ».
c) книга тигра: структура данных в куче (вместо стека), которая содержит оба указателя функций (MC) и указатель окружения (EP), представляющий функциональную переменную;
d) on lisp: комбинация функции и набора переменных привязок называется замыканием; замыкания - это функции с локальным состоянием;
e) Видео google i/o: похоже на экземпляр класса, в котором данные (экземпляр obj) инкапсулируют код (vtab), где в случае замыкания код (функциональная переменная) инкапсулирует данные.
f) инкапсулированные данные являются частными для функциональной переменной, подразумевая, что закрытие может использоваться для скрытия данных.
g) закрытие в нефункциональных языках программирования: обратный вызов с файлом cookie в C является аналогичной конструкцией, а также «закрытие» glib: закрытие glib представляет собой структуру данных, инкапсулирующую аналогичные вещи: указатель обратного вызова сигнала, cookie частные данные и деструктор замыкания (поскольку в C нет GC).
h) книга тигра: «функция более высокого порядка» и «область вложенных функций» вместе требуют решения для случая, когда функция папа возвращает функцию малыша, которая ссылается на переменные в области своего папы, подразумевая, что даже папа возвращает переменные в своей области не может быть «всплывающим» из стека ... решение заключается в распределении замыканий в куче.
i) Грег Майклсон ($ 10.15): (в реализации lisp) закрытие - это способ идентифицировать взаимосвязь между свободными переменными и лексическими связанными переменными, когда необходимо (как это часто необходимо) вернуть значение функции со свободными переменными заморожен до значений из определяющей области.
j) histroy and этимология: Питер Дж. Ландин определил термин закрытие в 1964 году как имеющий часть среды и контрольную часть, используемую его машиной SECD для оценки выражений. Джоэл Мозес приписывает Ландину введение термина «замыкание» для обозначения лямбда-выражения, открытые привязки которого (свободные переменные) были закрыты (или связаны) лексической средой, что привело к закрытому выражению или замыканию. Это использование впоследствии было принято Суссманом и Стил, когда они определили Схему в 1975 году и получили широкое распространение.
+1 to @dystroy ответить. Вам не нужно вызывать другую функцию внутри функции, чтобы закрыть первую. Это похоже на людей, которые используют «return null». Вам не нужно возвращать что-то, чтобы закончить функцию. Просто закройте его: P – DaGLiMiOuX
это то, что я думал, но в видео это определение было дано так, поэтому я думал, что подтвержу то же самое – Nav
@DaGLiMiOuX - OP спрашивает о [закрытиях] (http://en.wikipedia.org/ wiki/Closure_ (computer_science)), не говоря о том, как закончить функцию. – nnnnnn