Emacs 在早期返回模式中根据系统类型生成值

问题描述 投票:0回答:1

我尝试从

system-type
生成值,就像在具有早期返回模式的常见 Pascal 函数中一样:

{ ASSUMING system_type is a global VAR }
FUNCTION font_name: String
BEGIN
  result :='Courier';
  IF system_type = 'darwin'    THEN Exit('Menlo');
  IF system_type = 'gnu/linux' THEN Exit('Monospace');
END;

但找不到合适的表达方式:

片段


(defmacro font-name ()
  (declare (indent defun))
  `(when (eq system-type 'darwin)    "Menlo")
  `(when (eq system-type 'gnu/linux) "Monospace")
   "Courier")

尽管有系统类型“达尔文”,但总是给我“信使”。

这个可以工作,但是需要嵌套 if else...

(defun i4w-editor-font ()
   (if (eq system-type 'darwin)
       "Menlo"
       (if (eq system-type 'gnu/linux)
          "Monospace"
          "Courier")))

是否有可能编写“提前返回”模式。

elisp
1个回答
0
投票

第一件事是:没有必要就不要定义宏,也没有必要是宏。宏是一个完全独立的主题,但是(与函数一样)返回值是最终形式,因此对宏的any调用会扩展为

"Courier"

这个可以工作,但是需要嵌套 if else...

还有其他条件结构:

(defun i4w-editor-font ()
  "Return font according to `system-type'."
  (cl-case system-type
    ('darwin "Menlo")
    ('gnu/linux "Monospace")
    (t "Courier")))
© www.soinside.com 2019 - 2024. All rights reserved.