Elisp交互式函数名称

时间:2011-03-20 22:40:19

标签: emacs elisp

我正在尝试使用交互式功能名称功能。在emacs lisp手册上,它说:

“A” 函数名称(即满足fboundp的符号)。现有,完成,提示。

所以我尝试了一个小测试代码:

(defun testfun1 ()
  (message "hello, world!"))

(defun test (abcd)
  (interactive "aTheme name: ")
  (abcd))

Emacs说错误,

test:Symbol的函数定义为void:abcd

我尝试用fboundp测试abcd,它返回t。所以我对如何在交互式中使用'a'选项感到很困惑。 任何身体都可以提供一些提示吗?

2 个答案:

答案 0 :(得分:5)

您的函数test接收其参数abcd作为函数,但您不能通过将引用它的符号放在要评估的列表的第一个位置来调用函数。由于Emacs Lisp是 Lisp-2 ,因此对交互式查询提供的函数的引用存储在符号abcd值槽中,而不是其< em>功能插槽。像

这样的列表的评估规则
(abcd)

如果该对象是符号,则查看第一个对象的功能槽,它就是你的情况。如果您希望调用符号的值槽中引用的函数,则需要the funcall function

(funcall abcd)

这就是说,“拿abcd,从值插槽中取出值,并且,如果它是一个函数,请在此处调用,就像我们在该函数具有的那样在列表的第一个位置引用了符号的功能槽或直接引用功能对象。“

这里的an answer to a similar question带有参考资料,可以让您进一步探究。

答案 1 :(得分:0)

这应该做到这一点:

(defun test (abcd)
  (interactive "aTheme name: ")
  (call-interactively abcd))