elisp: захват переменной из внутренней функции - PullRequest
6 голосов
/ 16 февраля 2011

Моя любимая функция:

(defun f (x)
  (lambda (y) (+ x y)))

Тогда я ожидаю этого:

(funcall (f 2) 2)

Чтобы вернуть 4. Но, увы, я получил это вместо:

Debugger entered--Lisp error: (void-variable x)

Так, как я могу захватить переменную из внутренней функции?

1 Ответ

8 голосов
/ 16 февраля 2011

Вас укусил динамический обзор Элиспа.x в лямбда-выражении относится к переменной x, которая находится в области видимости при вызове лямбда-выражения (и поскольку в этом случае при вызове ее нет области действия x, вы получаете ошибку), а неx, который находится в области действия при создании лямбды.

Некоторые способы симуляции лексических замыканий в elisp описаны на этой странице в EmacsWiki .

...