Emacs:键绑定到匿名函数的性能

Emacs: Performance of keybinding to an anonymous function

我的两个选择是

绑定前定义函数

例如:

(defun select-all ()
  (interactive)
  (mark-whole-buffer))

然后绑定:

(global-set-key (kbd "C-a") 'select-all)

绑定匿名函数

一次性定义和绑定:

(global-set-key (kbd "C-a")
        (lambda ()
          (interactive)
          (mark-whole-buffer)))

我的问题

如果我一次性定义和绑定,对性能有影响吗?

参考文献

emacswiki.org - InteractiveKeybinding好像在告诉我们可以接受

对于绑定的一般使用,没有性能影响。对于使用该信息的其他命令(例如 C-h k),性能可能会受到很小的影响,但这也很小,您甚至不太可能注意到它,并且考虑到您可能不经常使用 C-h k,等式中效率最低的部分是用户。

定义函数然后绑定它而不是仅仅执行 lambda 有两个主要好处

  1. 重用。拥有命名函数意味着您可以将它与 M-x 一起使用,或者可能在您编写的其他函数或库中使用它。

  2. 文档。这是一个重要的。我经常发现自己在查看基于 lambda 的键绑定,并且必须通过它才能准确记住它的作用。另一方面,如果它是我绑定的命名函数,那么它可能会更明显。您还可以获得 C-h k 的东西和对命名函数的适当支持。

因此,我倾向于只在 lambda 类型绑定非常简单且很明显它在做什么时才使用它,而在所有其他时间使用命名函数。