Sis*_*cia 5 macros clojure configuration-files
我有一个clojure应用程序需要一些配置变量,主要是字符串,但也需要评估.
我可以用以下内容声明每个变量:
(def config-db "URI_DB"))
(def config-time (hours 1))
Run Code Online (Sandbox Code Playgroud)
但我认为这可能是一个好主意(我不是很确定)写一个宏来做到这一点,看起来像这样:
(make-config
config-db "URI_DB"
config-time (hours 1))
Run Code Online (Sandbox Code Playgroud)
(或者我可以将名称放在向量中,看起来更像是一个let语句)
但是当我放了一对以上的夫妇时,我遇到了问题,我这样做了:
(defmacro define-config
[name definition]
`(def ~name ~definition))
Run Code Online (Sandbox Code Playgroud)
但是我真的没有任何关于如何在更有用的东西中扩展它的粘合剂......
有什么建议或想法吗?
我强烈建议你def单独做每一个.这个宏很简单,但不是很有用.当有人看到时def,他们确切地知道发生了什么.当他们看到您的自定义make-config调用时,他们必须查看实现make-config以了解正在发生的事情.在大型示例中删除了一些字符并丢失了可读性.
话虽如此,你可以制作一个宏来轻松地做到这一点:
(defmacro make-config [& forms]
`(do ~@(for [[name body] (partition 2 forms)]
`(def ~name ~body))))
Run Code Online (Sandbox Code Playgroud)
以及用法示例:
user=> (make-config foo "foo" bar (str "b" "a" "r"))
#'user/bar
user=> foo
"foo"
user=> bar
"bar"
Run Code Online (Sandbox Code Playgroud)