在ELisp中测试用户设置变量是否相等

时间:2019-05-02 08:28:57

标签: elisp

我是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 个答案:

答案 0 :(得分:2)

在将变量名传递给eq时不要引用它:

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

这段代码的问题:

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

when将返回nil(如果条件为假)或正文的 last 值(如果条件为真),则返回大小写为nil-因此,这段代码将始终返回nil。使用if代替when,您应该看到它返回t