我是emacs lisp的新手,并在mu4e send-delay中更改了一些代码。我想测试用户是否将变量设置为值,例如在刮擦缓冲区中:
(setq mu4e-sent-messages-behavior 'delete)
delete
这三个测试返回错误:
(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
我的测试有什么问题,如何测试用户设置的变量的值?
将其传递给 eq
时不要引用变量名称:
(eq mu4e-sent-messages-behavior 'delete)
此代码的问题:
(when (member mu4e-sent-messages-behavior '(sent)) t nil)
是when
将返回 nil
(如果条件为false(或的身体值(如果条件为true(,在这种情况下为 nil
-因此代码将始终返回nil
。使用if
代替when
,您应该看到它返回t
。