簡體   English   中英

在另一個宏中需要來自同一文件的宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM