0
如何將符號名稱替換爲在宏中創建的函數?我想我在這裏錯過了一些明顯的東西。例如,我試圖與簽名的宏定義了一些類似於以下變量和函數,宏中的替換符號名稱
(cl-defmacro mac (pkg)
(let (
;; Define some variables
(sym (intern (concat pkg "-file")))
(sym-def "default-file.el")
(sym-doc (concat "A custom var from `" pkg "'."))
;; Define some functions
(symfn (intern (concat pkg "-fn")))
(symfn-doc (concat "A function for `" pkg "'.")))
`(list
(defcustom ,sym ,sym-def ,sym-doc
:group (quote ,(make-symbol pkg))
:type '(choice (const :tag "None" nil)
file))
(defun ,symfn()
,symfn-doc
(interactive)
(fn ,sym)))))
函數返回進行調用到另一個函數(fn
)像
(defun fn (var) (symbol-value var))
因此,它正在等待一個電話,如(fn 'some-var)
。而且,我希望能夠使用宏像
(mac "pack")
,並具有以下工作,
pack-file ; works: "default-file.el"
(pack-fn) ; error: not a symbol
我已經試過像(quote ,sym)
,symbol-name
,和其他人的事情......但不能似乎是對的。
宏的擴展也許應該是一個'progn'形式,一兩件事。您可能希望將'fn'調用爲'(fn',sym)'。 (我沒有任何關於elisp的信息,但剩下的看起來沒問題)。 – tfb
你在問題中提到過,所以我敢打賭這是手指麻煩...... – tfb