【问题标题】:Correct use of apply in Emacs Lisp?在 Emacs Lisp 中正确使用 apply?
【发布时间】:2010-06-10 13:30:39
【问题描述】:

我不确定这里是否推荐使用apply。动态设置主要模式是否有更好/标准的解决方案?我找不到其他的。

背景:

只要我得到

X has auto save data; consider M-x recover-this-file

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。我还将自动保存文件的主模式设置为原始文件的主模式,以获得一致的字体锁定。

【问题讨论】:

  • 这是一个非常方便的 elisp 块,不管 'apply' 是否是正确的选择。

标签: emacs elisp


【解决方案1】:

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

(funcall file-major-mode)

它与 apply 的不同之处在于它不接受参数列表,只接受参数。以下两者是等价的:

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

【讨论】:

  • 谢谢,这很好。使用 funcall 我不必将该空列表添加为参数。看起来更好。
【解决方案2】:

对我来说它看起来不错 - 这就是 apply 的用途。

此外,您自己也说过:代码做您想做的事! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多