emacs 26 中的无效函数但在 emacs 25 中有效

invalid-function in emacs 26 but works in emacs 25

这适用于 emacs 25:

(setq custom-keymap (copy-keymap global-map))

(defun custom-def (keys func &optional file &optional global-p)
  (define-key custom-keymap keys func)
  (if global-p (global-set-key keys func))
  (if file (autoload func file "[custom autoload]" t)))

(custom-def [delete] 'delete-char)

但是当我在 emacs 26 中调用 custom-def 时,出现 invalid-function 错误。我将它隔离到 &optional 参数。我删除了这两个参数并且 custom-def 有效。

那么 25 和 26 之间发生了什么变化?我在这里错过了什么?我想要在 emacs 25 中工作的灵活的 ARGLIST。

在参数列表中只使用一次 optional - 以下参数都是可选的 [其他关键字也可以跟在后面 - 参见 info(elisp) Functions]。

(defun custom-def (keys func &optional file global-p)
  ;; ...
  )

[我不确定发生了什么变化 - 也许添加了重复参数检查?]