我什么时候可以使用;什么时候;emacs lisp中的关键字(或表达式)

我什么时候可以使用;什么时候;emacs lisp中的关键字(或表达式),emacs,elisp,operator-keyword,Emacs,Elisp,Operator Keyword,我正在学习如何通过学习emacs lisp扩展本地GNU emacs软件。在我遇到的一个源代码中,我看到了一个“when”。我认为这是一个控制结构,但我不确定。我曾尝试在谷歌上搜索“emacs lisp中的when关键字/表达式”(以及其他类似的排列)。我甚至查看了gnu.org网站。我只找到包含“when”的源代码,但没有说明如何以及何时使用“when”。有人能告诉我在emacs lisp中,在控制结构等中应该如何以及在什么适当的情况下使用“when”吗?提前感谢。RET时键入C-h f,您将

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

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

子r.el
中的Lisp宏时

(当条件体…)

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

如果对其进行宏展开,可以看到其实现方式:

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

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

,许多人遵循惯例,使用when和excel向人类读者发出信号,表示sexp的返回值并不重要,重要的是执行了任何副作用。

,还要注意还有一个
除非
,这可能比
(当(不…)
看到我答案的最后一句话时)更可取!虽然有效,但链接似乎已断开。这似乎表明这个答案是错误的。当需要指示副作用时,请使用