【问题标题】:Testing user-set variable for equality in ELisp在 ELisp 中测试用户设置变量是否相等
【发布时间】:2019-05-03 16:38:46
【问题描述】:

我是 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

我的测试出了什么问题,如何测试用户设置的变量的值?

【问题讨论】:

  • 引号表示您正在测试 symbol mu4e-sent-messages-behavior 是否与符号 delete(或字符串 "delete")相同,当然还有不是——它们是不同的符号(或符号和字符串)。您想测试变量的 ,而不是变量的符号。

标签: elisp


【解决方案1】:

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

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

这段代码的问题:

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

when 将返回 nil(如果条件为假)或主体的 last 值(如果条件为真),在本例中为 @987654326 @ - 所以这段代码总是返回nil。使用if 而不是when,您应该会看到它返回t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2017-09-30
    • 1970-01-01
    • 2011-05-17
    • 2022-11-06
    相关资源
    最近更新 更多