Символ кавычки в лямбда-выражении?

В анонимной функции, такой как

(lambda () x)

как я могу заменить символ x со значением в текущей области?

Единственное, о чем я могу думать, это

(eval `(lambda () ,x))

но мне интересно, есть ли другой путь.

2 ответа

Решение

Удалить eval, Просто `(lambda () ,x),

Это возвращает список (lambda () VAL-X), где VAL-X это значение переменной x, И лямбда-список интерпретируется Emacs как функция.

Лучшее решение - добавить

;; -*- lexical-binding:t -*-

в начале вашего файла. Как только вы это сделали, написание (lambda () x) это все, что нужно, так как Emacs позаботится о замене этого x со значением из области, окружающей эту лямбду (т.е. создаст правильное замыкание).

Другие вопросы по тегам