【问题标题】:Emacs claims I'm quoting a lambda, but I'm notEmacs 声称我引用了一个 lambda,但我没有
【发布时间】:2014-01-16 04:57:30
【问题描述】:

我将此添加到我在 emacs 中的 init.el 中:

(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")
    (ido-mode t)
    (global-visual-line-mode 1)))

(add-hook 'clojure-mode-hook
 (lambda ()
    (rainbow-delimiters-mode 1)))

现在 emacs 会自动将单词 lambda 转换为符号 lambda 但我不知道这是否是问题所在。当我启动 emacs 时,它报告:

(lambda (line) ...) quoted with ' rather than with #'

但我没有引用 lambda。如果我删除上面的代码行,错误就会消失。

为什么会出现这个错误?

【问题讨论】:

  • 上述lambdas 中没有field 参数。必须是另一个lambda
  • @Tobias 不确定它是否有所作为,但实际上它使用了“line”而不是“field”这个词,我已经更新了这个问题。我无法想象它是任何其他 lambda,因为如果我取出上述内容,错误就会消失并且一切都会加载。
  • 确实没有区别。无论如何都要在初始化文件中搜索'(lambda。我的印象是,有时字节编译器对他必须重新编译的内容和不需要重新编译的内容太聪明了。引用的 lambda 可以在其他地方。

标签: emacs clojure elisp emacs24


【解决方案1】:

这不是代码中的错误,而是 Emacs 提供的某些代码中的错误,这些代码由您正在调用的函数之一调用。很有可能是Emacs bug #11357

您的代码是合适的,但正如 sds 指出的那样,您使用 emacs-startup-hook 使事情变得过于复杂。当您的.emacs 正在加载时,大多数事情都可以完成。

(ido-mode t)
(global-visual-line-mode 1)
(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")))

我能想到像你那样使用emacs-startup-hook 的唯一原因是,如果你经常重新加载你的.emacs 并且你经常更改ido-modeglobal-visual-line-mode 并且不要希望在您重新加载 .emacs 时恢复它们。

有关从 Emacs 中获得更多而不是杀死 *scratch* 的其他方法,请参阅 Automatically closing the scratch bufferPrevent unwanted buffers from opening

【讨论】:

    【解决方案2】:
    1. 警告中的lambda 有一个line 参数;你的钩子没有。要么你的 init 文件中引用了不同的 lambda,要么这是字节编译器中的错误。

    2. 根本没有理由引用 lambda;你做得对。

    3. 我认为您使用 emacs-startup-hook 的方式不正确;只需将(ido-mode t)(global-visual-line-mode 1) 原样放入init 文件中即可。

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2023-02-20
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多