【发布时间】:2012-03-29 12:32:55
【问题描述】:
我想编写一个使用 clj-time 库中的函数的宏。在一个命名空间中,我想这样调用宏:
(ns budget.account
(:require [budget.time]))
(budget.time/next-date interval frequency)
下一个日期宏将在另一个文件中定义,如下所示:
(ns budget.time
(:require [clj-time.core :as date]))
(defmacro next-date [interval freq]
`(~interval ~freq))
如果使用以下参数 (budget.time/next-date 间隔频率) 和间隔和频率调用宏,其中 "weeks" 和 "2" 分别是 "weeks" 和 "2",那么宏展开将看起来像这样 (clj-time.核心/周 2)
每当我从 REPL 尝试此操作时,它都无法解析命名空间。
有没有办法强制宏将时间间隔解析为 clj-time 命名空间的参数?最好的方法是什么?
谢谢!
【问题讨论】:
-
为什么要写宏。这不能通过常规功能完成吗?记住:当函数可以运行时,你永远不应该编写宏。
标签: macros clojure namespaces