我正在尝试使用交互式功能名称功能.在emacs lisp手册上,它说:
'a'函数名称(即满足fboundp的符号).现有,完成,提示.
所以我尝试了一个小测试代码:
(defun testfun1 ()
(message "hello, world!"))
(defun test (abcd)
(interactive "aTheme name: ")
(abcd))
Run Code Online (Sandbox Code Playgroud)
Emacs提出错误说,
test:Symbol的函数定义为void:abcd
我尝试用fboundp测试abcd,它返回t.所以我对如何在交互式中使用'a'选项感到很困惑.任何身体都可以提供一些提示吗?
您的函数将test其参数abcd作为函数接收,但您不能通过将引用它的符号放在要评估的列表的第一个位置来调用函数.由于Emacs Lisp是一个Lisp-2,因此对交互式查询提供的函数的引用存储在符号abcd的值槽中,而不是其功能槽中.列表的评估规则如
(abcd)
Run Code Online (Sandbox Code Playgroud)
涉及查看第一个对象的函数槽,如果该对象是一个符号,它就是你的情况.如果您希望调用符号值槽中引用的函数,则需要以下funcall函数:
(funcall abcd)
Run Code Online (Sandbox Code Playgroud)
这就是说," abcd拿出,从它的值槽中取出值,并且,如果它是一个函数,在这里调用它,就像我们在列表的第一个位置被引用在符号的函数槽中或者通过直接引用函数对象."
这是一个类似问题的答案,其中的参考资料可以帮助您进一步探索.