defun宏异常行为:为何定义时过程会自动执行?
为什么定义InsertSsulku函数后它会自动执行?
正常情况下,defun宏仅负责将函数代码绑定到对应的符号上,不会自动执行函数体。你的函数在定义完成后就自动运行,大概率是以下原因之一:
- 你在定义函数的代码末尾,不小心添加了调用函数的表达式(比如
(InsertSsulku)),导致Emacs在完成函数定义后立刻执行了这个调用。 - 你在Emacs中使用了错误的代码求值方式:比如没有对整个
defun表达式求值,而是单独选中了函数体部分(从let*到insert的代码)进行求值,这会直接触发x-popup-menu的执行。 - 该函数被某个自动触发的钩子或事件调用:比如你之前将
InsertSsulku添加到了after-load-hook这类钩子中,当函数定义完成时刚好触发了钩子的执行。
你的代码本身没有语法错误会导致定义阶段执行函数体,代码如下:
(defun InsertSsulku () "Вставка текста ссылки на якорь-ноду в точку" (interactive) (let* ((karta '(keymap "Вставка ссылок" ("Решения" menu-item "Решения" (keymap "Решения" ("@ref{сбрнкФйлвРквдств, текст-ссылки}" menu-item "@anchor{сбрнкФйлвРквдств}" fint-function :key-sequence nil))) ("Скрипты" menu-item "Скрипты" (keymap "Скрипты" ("@ref{Родительский скрипт, текст ссылки}" menu-item "@anchor{Родительский скрипт}" fint-function :key-sequence nil) ("@ref{Дочерний скрипт, текст ссылки}" menu-item "@anchor{Дочерний скрипт}" fint-function :key-sequence nil))))) (выбзнч (x-popup-menu (list '(0 0) (selected-frame)) karta))) (insert (nth (- (length выбзнч) 1) выбзнч))))
内容的提问来源于stack exchange,提问作者uanr81
相关产品推荐
相关产品推荐

