Символ кавычки в лямбда-выражении?
В анонимной функции, такой как
(lambda () x)
как я могу заменить символ x
со значением в текущей области?
Единственное, о чем я могу думать, это
(eval `(lambda () ,x))
но мне интересно, есть ли другой путь.
2 ответа
Решение
Удалить eval
, Просто `(lambda () ,x)
,
Это возвращает список (lambda () VAL-X)
, где VAL-X
это значение переменной x
, И лямбда-список интерпретируется Emacs как функция.
Лучшее решение - добавить
;; -*- lexical-binding:t -*-
в начале вашего файла. Как только вы это сделали, написание (lambda () x)
это все, что нужно, так как Emacs позаботится о замене этого x
со значением из области, окружающей эту лямбду (т.е. создаст правильное замыкание).