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 有两个主要好处
重用。拥有命名函数意味着您可以将它与 M-x 一起使用,或者可能在您编写的其他函数或库中使用它。
文档。这是一个重要的。我经常发现自己在查看基于 lambda 的键绑定,并且必须通过它才能准确记住它的作用。另一方面,如果它是我绑定的命名函数,那么它可能会更明显。您还可以获得 C-h k 的东西和对命名函数的适当支持。
因此,我倾向于只在 lambda 类型绑定非常简单且很明显它在做什么时才使用它,而在所有其他时间使用命名函数。
我的两个选择是
绑定前定义函数
例如:
(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 有两个主要好处
重用。拥有命名函数意味着您可以将它与 M-x 一起使用,或者可能在您编写的其他函数或库中使用它。
文档。这是一个重要的。我经常发现自己在查看基于 lambda 的键绑定,并且必须通过它才能准确记住它的作用。另一方面,如果它是我绑定的命名函数,那么它可能会更明显。您还可以获得 C-h k 的东西和对命名函数的适当支持。
因此,我倾向于只在 lambda 类型绑定非常简单且很明显它在做什么时才使用它,而在所有其他时间使用命名函数。