Emacs:对匿名函数进行键绑定的性能

时间:2016-03-16 16:44:20

标签: emacs lisp elisp

我的两个选择是

在绑定前定义功能

例如:

(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似乎告诉我们这是可以接受的。

1 个答案:

答案 0 :(得分:1)

关于绑定的一般使用没有性能损失。对于使用该信息的其他命令,例如Ch k,可能会有轻微的性能损失,但这也很小,你甚至不会注意到它并且给你可能不经常使用Ch k ,等式中效率最低的部分是用户。

定义一个功能然后绑定它而不仅仅是做一个lambda

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

  2. 文档。这是一个重要的问题。我经常发现自己正在寻找一个基于lambda的键绑定,并且必须通过它来记住它的确切功能。另一方面,如果它是我所约束的命名函数,那么它可能会更加明显。您还可以获得命名函数的C-h k和apropos支持。

  3. 因此,我倾向于仅使用lambda类型绑定,因为它实际上是微不足道的并且显而易见它正在做什么并且在所有其他时间使用命名函数。