Wie kann ich einen Symbolnamen in eine Funktion einfügen, die in einem Makro erstellt wurde? Ich denke, ich vermisse hier etwas Offensichtliches. Zum Beispiel, Ich versuche, ein Makro zu machen, die einige Variablen und Funktionen ähnlich der folgenden definiert,Ersatzsymbolname im Makro
(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)))))
Die Funktion gibt einen Aufruf zurückgeführt auf eine andere Funktion macht (fn
) mit einer Signatur wie
(defun fn (var) (symbol-value var))
So erwartet es einen Anruf wie (fn 'some-var)
. Und ich will das Makro zu verwenden, um der Lage sein, wie
(mac "pack")
und haben die folgende Arbeit,
pack-file ; works: "default-file.el"
(pack-fn) ; error: not a symbol
ich versucht habe, Dinge wie (quote ,sym)
, symbol-name
und andere ... Aber kann nicht scheinen es richtig zu machen.
Die Erweiterung des Makros wahrscheinlich eine 'progn' Form sein sollte, für eine Sache. Sie möchten wahrscheinlich, dass der Aufruf von 'fn' '(fn ', sym)' ist. (Ich habe nichts mit elisp auf der Hand, aber der Rest sieht OK). – tfb
Du hast es in der Frage erwähnt, also wette ich, es waren Fingerprobleme ... – tfb