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