Spec-Zone.ru › Elisp

Замыкания

Как объясняется в Области видимости переменных, Emacs может по желанию включить лексическое связывание переменных. При включенном лексическом связывании любая именованная функция, которую вы создаёте (например, с помощью defun), а также любая анонимная функция, которую вы создаёте с помощью макроса lambda, специальной формы function или синтаксиса #' (см. Анонимные функции), автоматически преобразуется в замыкание.

Замыкание — это функция, которая также содержит запись лексической среды, существовавшей при определении функции. При вызове функция использует сохранённую лексическую среду для любых ссылок на лексические переменные в своём определении. Во всех остальных отношениях замыкания ведут себя как обычные функции; в частности, их можно вызывать так же, как и обычные функции.

См. Лексическое связывание для примера использования замыкания.

В настоящее время объект замыкания Emacs Lisp представлен списком с символом closure в качестве первого элемента, списком, представляющим лексическую среду, в качестве второго элемента, и списком аргументов и тела функций как оставшимися элементами:

;; lexical binding is enabled.
(lambda (x) (* x x))
     ⇒ (closure (t) (x) (* x x))

Однако тот факт, что внутренняя структура замыкания доступна остальной части мира Lisp, считается внутренней деталью реализации. По этой причине мы рекомендуем не пытаться напрямую изучать или изменять структуру объектов замыканий.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Closures.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API