2011-03-20 78 views
1

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

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

所以我用一个小的测试代码试了一下:

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

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

Emacs中给出了一个错误的说法,

测试:符号的功能定义是无效:ABCD

我试图测试与ABCD fboundp,它返回t。所以我很困惑如何在交互中使用'a'选项。 任何机构都可以提供一些提示?

回答

5

你的功能test接收它的参数abcd的功能,但通过把一个符号列表中的第一个位置引用它,你不能只是调用一个函数进行评估。由于的Emacs Lisp是Lisp的2,参考提供给交互式查询的功能被存储在符号abcd值槽,而不是其功能槽。对于像

(abcd) 

列表评价规则涉及在寻找第一个对象的功能插槽如果对象是一个符号,它是你的情况。相反,如果你想调用一个符号的值插槽引用的功能,你需要the funcall function

(funcall abcd) 

,上面写着,“把abcd,抢了其价值插槽的价值,并且,只要它是一个函数,在这里调用它,就像我们在列表的第一个位置中引用函数一样,或者在符号的函数槽中,或者直接引用函数对象。

这里的an answer to a similar question有助于您进一步探索的参考。

+0

啊,谢谢,这清除了事情。 – sudo 2011-03-20 23:22:32

0

这应该做这种伎俩:

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