我对Elisp有一个(可能)愚蠢的问题。我希望函数返回t
或nil
,具体取决于when
条件。这是代码:
(defun tmr-active-timer-p
"Returns t or nil depending of if there's an active timer"
(progn
(if (not (file-exists-p tmr-file))
nil
; (... more code)
)
)
)
但我有一个错误。我不确定如何使函数返回一个值...我已经读取了一个函数返回最后一个表达式结果值,但在这种情况下,我不想做类似的事情(PHP混乱警告):
// code
if ($condition) {
return false;
}
// more code...
也许我错过了这一点,功能编程不允许这种方法?
答案 0 :(得分:16)
首先,您需要tmr-active-timer-p
之后的参数列表; defun
语法是
(defun function-name (arg1 arg2 ...) code...)
第二次,您无需将身体包裹在progn
中。
第三,返回值是评估的最后一个表单。如果你的情况你可以写
(defun tmr-active-timer-p ()
"Returns t or nil depending of if there's an active timer."
(when (file-exists-p tmr-file)
; (... more code)
))
如果文件不存在,它将返回nil
(因为(when foo bar)
与(if foo (progn bar) nil)
相同)。
最后,在lisp中,挂括号被视为代码格式不佳。
PS。 Emacs Lisp没有return
,但确实有Nonlocal Exits。除非你真的知道你在做什么,否则我建议你避免使用它们。