[英]Require macros from the same file in another macro
在下面的代碼中,鑒於hy
似乎在未明確需要宏的依賴宏時給出NameError
,我如何在另一個宏中需要同一文件中的宏?
(defmacro with-cwd [#* body] `(do ~@body))
(defmacro let-cwd [vars #* body] `(let ~vars (with-cwd ~@body)))
在名為oreo
oreo.hy
文件中,我使用(require oreo.oreo [with-cwd])
嘗試了以下方法,但均未奏效:
(defmacro let-cwd [vars #* body] (require oreo.oreo [with-cwd]) `(let ~vars (with-cwd ~@body)))
(defmacro let-cwd [vars #* body] `(let ~vars (require oreo.oreo [with-cwd]) (with-cwd ~@body)))
(defmacro let-cwd [vars #* body] `(let ~vars ~(require oreo.oreo [with-cwd]) (with-cwd ~@body)))
(defmacro let-cwd [vars #* body] `(do (require oreo.oreo [with-cwd]) (let ~vars (with-cwd ~@body))))
(defmacro let-cwd [vars #* body] `(do ~(require oreo.oreo [with-cwd]) (let ~vars (with-cwd ~@body))))
更新:根據要求,我已將代碼修改為原始問題仍然存在的程度,但代碼本身要短得多。
正如Kodiologist在此處的評論中所指出的,第四個版本有效; 因此,兩個測試文件的最終版本是:
;; a.hy
(defmacro with-cwd [#* body] `(do ~@body))
(defmacro let-cwd [vars #* body] `(do (require oreo.oreo [with-cwd]) (let ~vars (with-cwd ~@body))))
和:
;; b.hy
(require a [let-cwd])
(let-cwd [ string "Hello!" ] (print string))
然后第二個文件輸出Hello
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.