(defun foo (aa)
(interactive)
(progn
(setq aa '(+ aa 1))
))
(defun bar ()
(interactive)
(setq b 6)
(add-hook 'post-self-insert-hook (foo b)))
elisp不会增加b
,而是会引发错误:Invalid function: 7
。它确实将b
作为参数,但是仅当其等于6时,它在递增后停止工作。为什么?问题出现在b
等于任何数字的情况下,它总是打印类似Invalid function:b+1
的消息。
答案 0 :(得分:1)
答案 1 :(得分:0)
正如sds所说,该代码存在很多问题。
(defun foo (aa)
(interactive)
(progn
(setq aa '(+ aa 1))
))
此函数简要地将变量aa
(它是它自己的参数,该函数之外的任何事物都看不到)设置为文字引用形式(+ aa 1)
。它还返回相同的值。 aa
是符号aa
,仅此而已。
(defun bar ()
(interactive)
(setq b 6)
(add-hook 'post-self-insert-hook (foo b)))
(foo b)
不是函数,因此将其添加到钩子将导致错误。
(lambda () (foo b))
是一个调用(foo b)
elisp引发错误:函数无效:7。
没有显示的代码,没有。显然,您正在评估的版本中,您没有引用了(+ aa 1)
,在这种情况下,(foo 6)
实际上会返回7
,因此您尝试这样做这个:
(add-hook 'post-self-insert-hook 7)