Emacs Lisp中apply的正确使用方法是什么?

8
我不确定在这里使用apply是否推荐。有没有更好/标准的解决方案来动态设置主要模式?我找不到其他的方法。
背景:
每当我在Emacs中收到以下消息时: X has auto save data; consider M-x recover-this-file 我想知道当前文件和自动保存版本之间的区别。由于大多数情况下我无法打扰查找它,所以我尝试自动化任务:
(defun ediff-auto-save ()
  "Ediff current file and its auto-save pendant."
  (interactive)
  (let ((auto-file-name (make-auto-save-file-name))
        (file-major-mode major-mode))
    (ediff-files buffer-file-name auto-file-name)
    (switch-to-buffer-other-window (file-name-nondirectory auto-file-name))
    (apply file-major-mode '())
    (other-window 1))) ;; back to ediff panel

代码实现了我想要的功能,它打开了自动保存的文件并开始使用ediff。我还将自动保存文件的主模式设置为原始文件的主模式,以保持一致的字体锁定。


这是一段非常方便的elisp代码块,无论是否选择'apply'都可以使用。 - Anne
2个回答

5

虽然apply确实可以用于此,但funcall可能更适合

(funcall file-major-mode)

它与apply不同之处在于,它不需要接收参数列表,只需参数即可。以下两种写法是等效的:

(funcall '+ 1 2)
(apply '+ '(1 2))

谢谢,这是一个好观点。使用funcall,我不必添加空列表作为参数。看起来更好。 - malana

2

我认为这看起来很好 - 这就是apply的作用。

此外,你自己说了:代码已经实现了你想要的功能!:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接