在Emacs Lisp中正确使用apply?
我不确定这里是否推荐使用在Emacs Lisp中正确使用apply?,emacs,elisp,Emacs,Elisp,我不确定这里是否推荐使用apply。是否有更好的/标准的解决方案来动态设置主模式?我找不到别的了 背景: 每当我收到通知 X自动保存数据;考虑MX恢复这个文件< /代码> < /P> 消息在Emacs中,我想知道当前文件和自动保存版本之间的区别是什么。由于大多数时候我都懒得去查,所以我尝试将任务自动化: (defun ediff-auto-save () "Ediff current file and its auto-save pendant." (interactive) (le
apply
。是否有更好的/标准的解决方案来动态设置主模式?我找不到别的了
背景:
每当我收到通知
X自动保存数据;考虑MX恢复这个文件< /代码> < /P>
消息在Emacs中,我想知道当前文件和自动保存版本之间的区别是什么。由于大多数时候我都懒得去查,所以我尝试将任务自动化:
(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。我还将自动保存文件的主模式设置为原始文件的主模式,以实现一致的字体锁定。我觉得这很好-这就是apply的用途
此外,你自己也说过:代码做你想要的 虽然apply肯定可以用于此,但funcall可能更适合
(funcall file-major-mode)
它与apply的不同之处在于它不接受参数列表,只接受参数。以下两项是等效的:
(funcall '+ 1 2)
(apply '+ '(1 2))
谢谢,这是一个很好的观点。有了funcall,我不必把那个空列表作为参数添加。看起来更好。这是一个非常方便的elisp块,无论“应用”是否是正确的选择。