Тестирование пользовательской переменной на равенство в ELisp - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в Emacs Lisp и изменяю некоторый код в mu4e-send-delay . Я хочу проверить, установил ли пользователь значение переменной, например, в пустом буфере:

(setq mu4e-sent-messages-behavior 'delete)
delete

Эти три теста возвращают false:

(eq 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior "delete")
nil

И этот возвращает true, но с функцией member для списков:

(if (member mu4e-sent-messages-behavior '(delete)) t nil)
t

Если пользователь сохраняет настройку по умолчанию, установленную в коде:

(defcustom mu4e-sent-messages-behavior 'sent
...
)

затем member также завершается ошибкой:

(when (member mu4e-sent-messages-behavior '(sent)) t nil)
nil

Что не так с моими тестами и как я могу проверить значение переменной, установленное пользователем?

1 Ответ

2 голосов
/ 02 мая 2019

Не заключайте в кавычки имя переменной при ее передаче eq:

(eq mu4e-sent-messages-behavior 'delete)

Проблема с этим фрагментом кода:

(when (member mu4e-sent-messages-behavior '(sent)) t nil)

означает, что when вернет либо nil (если условие ложно), либо значение last тела (если условие истинно), которое в данном случае равно nil - так что этот кусок кода всегда будет возвращать nil. Используйте if вместо when, и вы должны увидеть, что он возвращает t.

...