我何时在emacs lisp中使用"when"关键字(或表达式)

ala*_*bid 4 emacs elisp operator-keyword

我正在学习如何通过学习emacs lisp来扩展我的本地GNU emacs软件.在我遇到的其中一个源代码中,我看到了"何时".我认为这是一个控制结构,但我不确定.我已经尝试使用谷歌搜索"emacs lisp中的when keyword/expression"(以及其他类似的排序).我甚至检查了gnu.org网站.我只找到包含"when"的源代码,但没有关于如何以及何时使用"when"的描述.有人能告诉我在emacs lisp中我应该如何以及在适当的情况下在控制结构中使用"when"等?提前致谢.

Gar*_*ees 13

输入C-h f when RET,您将看到文档:

when是一个Lisp宏subr.el.

(when COND BODY...)

CONDyield为非时nil,eval BODY按顺序形成并返回最后一个的值,或者nil如果没有则返回.

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

ELISP> (macroexpand '(when cond body1 body2 body3))
(if cond
    (progn body1 body2 body3))
Run Code Online (Sandbox Code Playgroud)

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