0
매크로에서 생성 된 함수에 심볼 이름을 어떻게 대체 할 수 있습니까? 나는 여기서 명백한 것을 놓치고 있다고 생각한다. 예를 들어, 나는매크로의 대체 심볼 이름
(defun fn (var) (symbol-value var))
같은 서명 기능은 반환
(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
)에 대한 호출을 만드는
그래서 (fn 'some-var)
과 같은 전화가 올 것으로 예상됩니다. 그리고, 나는 (quote ,sym)
, symbol-name
, 그리고 다른 사람과 같은 일을 시도
pack-file ; works: "default-file.el"
(pack-fn) ; error: not a symbol
,
(mac "pack")
같은 매크로를 사용하여 다음과 같은 작업을 할 수 있도록하려는 ...하지만 할 수 없습니다 그것을 올바르게 얻는 것처럼 보입니다.
은 매크로의 확장은 아마도 한 가지를 들어,'progn' 형태이어야한다. 아마도'fn'에 대한 호출이'(fn ', sym)'가되기를 원할 것입니다. (필자에게는 elisp를 사용하는 것이 없지만 나머지는 괜찮아 보인다.) – tfb
당신이 질문에서 언급 했으니까요, 나는 그것이 손가락 문제라고 생각합니다 ... – tfb