在 ELisp 中测试用户设置变量是否相等
Testing user-set variable for equality in ELisp
我是 Emacs Lisp 的新手,正在更改 mu4e-send-delay 中的一些代码。我想测试用户是否将变量设置为一个值,例如在临时缓冲区中:
(setq mu4e-sent-messages-behavior 'delete)
delete
这三个测试return错误:
(eq 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior "delete")
nil
这一个 return 是正确的,但具有列表的 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
将 return nil
(如果条件为假)或正文的 last 值(如果条件为真),在本例中为 nil
- 因此这段代码将始终 return nil
。使用 if
而不是 when
,您应该会看到它 returning t
.
我是 Emacs Lisp 的新手,正在更改 mu4e-send-delay 中的一些代码。我想测试用户是否将变量设置为一个值,例如在临时缓冲区中:
(setq mu4e-sent-messages-behavior 'delete)
delete
这三个测试return错误:
(eq 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior 'delete)
nil
(equal 'mu4e-sent-messages-behavior "delete")
nil
这一个 return 是正确的,但具有列表的 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
将 return nil
(如果条件为假)或正文的 last 值(如果条件为真),在本例中为 nil
- 因此这段代码将始终 return nil
。使用 if
而不是 when
,您应该会看到它 returning t
.