emacs不接受after-change-function中的lambda。

问题描述 投票:0回答:1

我试图通过一个类方法重载给定缓冲区中的 after-change-function。notify-others-ofchange 是一个任意的函数。

(defmethod set-after-change-functions ((server server-class)
                                              name-of-buffer)
  "Adds appropriate after-change-functions to the given name-of-buffer."
  (with-current-buffer name-of-buffer
    (setq-local after-change-functions
                (cons 
                   (lambda (beg end prev-length)
                        (notify-others-of-change
                           server beg end prev-length))
                   after-change-functions))))

当试图在给定的缓冲区上运行这个函数时(我检查了一下,传递了一个有效的服务器对象),Emacs向我大喊 "符号的值作为变量是void:server",并且after-change-functions变为nil,即使之前有元素在里面。然而,当改成

(defmethod set-after-change-functions ((server server-class)
                                              name-of-buffer)
  "Adds appropriate after-change-functions to the given name-of-buffer."
  (with-current-buffer name-of-buffer
    (setq-local after-change-functions
                (cons
                   #'notify-others-of-change-SIMPLE
                   after-change-functions))))

其中notify-others-of-change-SIMPLE是基本的变更后函数,它只接受三个参数,就像上面的lambda一样,一切似乎都正常。我希望在这里使用lambda,但似乎不可能。为什么会出现这样的问题,是否可以将其改为允许使用lambdas?

variables debugging emacs
1个回答
2
投票

按照 legoscia 链接的问题中的描述,将 lexical-binding 设置为 t 作为文件本地变量,同时确保我所有的 lambdas 都用锐角引号而不是只用引号,成功地解决了这个问题。谢谢

© www.soinside.com 2019 - 2024. All rights reserved.