2011-03-20 103 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))