define-minor-mode 的两种写法有何区别?

以前我们写define-minor-mode都这么写:

(define-minor-mode foo-mode
  "Foo."
  nil " foo-mode" foo-mode-map
  (foo))

而我发现现在都这么写:

(define-minor-mode foo-mode
  "Foo."
  :lighter " foo-mode"
  :keymap foo-mode-map
  (foo))

这两种写法有啥区别吗?

谢谢。

define-minor-mode 定义:

(defmacro define-minor-mode (mode
                             doc
                             &optional init-value lighter keymap
                             &rest body)
  ...)

一旦末尾参数写了,按照写法1,中间 &optional 几个可选参数就必须按顺序全部写上。如果按照写法2,用命名参数(keyword),就可以少写,并且可以不按顺序。

结果并没有不同,但是书写便利,防止出错。

1 个赞

那么新的写法里,值为nil的keyword是不是就不用写?

因为我看到有些人的明确地写明了:global:init-value为nil,而有些人就省略了……

C-h f define-minor-mode

你看或不看 源码就在那里 不+不-

你想或不想 逻辑就在那里 不正不反

我就是看了才不明白……按理说不用的keyword是不用写的,但是为啥会有人写……

注释 也 没用

另一个是可读性问题。第一种写法不查看define-minor-mode的文档鬼知道 " foo-mode"这个参数是干什么的?