【问题标题】:When do I use the "when" keyword (or expression) in emacs lisp我什么时候在 emacs lisp 中使用“when”关键字(或表达式)
【发布时间】:2011-07-14 16:53:35
【问题描述】:

我正在学习如何通过学习 emacs lisp 来扩展我的本地 GNU emacs 软件。在我遇到的一个源代码中,我在那里看到了“何时”。我认为这是一个控制结构,但我不确定。我试过用谷歌搜索“emacs lisp 中的 when 关键字/表达式”(以及其他类似的排列组合)。我什至查看了 gnu.org 网站。我只找到了包含“when”的源代码,但没有描述如何以及何时使用“when”。有人可以告诉我在emacs lisp中的控制结构等中如何以及在什么适当的情况下使用“何时”?提前致谢。

【问题讨论】:

    标签: emacs elisp operator-keyword


    【解决方案1】:

    在 RET 时键入 C-h f,您将看到文档:

    whensubr.el 中的 Lisp 宏。

    (when COND BODY...)

    COND 产生非nil 时,eval BODY 依次形成并返回最后一个的值,如果没有则返回nil

    如果你对它进行宏扩展,你可以看到它是如何实现的:

    ELISP> (macroexpand '(when cond body1 body2 body3))
    (if cond
        (progn body1 body2 body3))
    

    在没有“else”子句的情况下,您应该使用when 而不是if。它看起来更好,它向读者提供了一个提示,即没有“else”子句。如果你有一个“else”子句但没有“then”子句,你可以写unless

    【讨论】:

    • 还要注意有一个unless,它可能比(when (not ...) ...)更可取
    • 看我回答的最后一句话!
    • 似乎链接已损坏,emacswiki.org/emacs/WhenToUseIf 虽然有效。这似乎表明这个答案是错误的。当你想指出副作用时,使用when
    【解决方案2】:

    许多人遵循使用 when 和 unless 的惯例来向人类读者表明 sexp 的返回值并不重要——重要的是执行的任何副作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多