我试图通过类方法重载给定缓冲区中的更改后函数。 notify-others-of-change是一个随意的函数。
(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"并且变换后的函数变为零,即使之前存在元素。但是,当改为
时(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?
答案 0 :(得分:2)
将lexical-binding设置为文件局部变量,如legoscia链接的问题所述,同时确保尖锐引用我的所有lambda而不是仅仅引用,设法解决问题。谢谢!