繁体   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