6

私はいくつかの構成変数、主に文字列だけでなく評価するものも必要とするclojureアプリケーションを持っています。

次のようなものですべての変数を宣言できます。

(def config-db "URI_DB"))
(def config-time (hours 1))

しかし、それは良い考えかもしれないと思いました(私にはよくわかりません)。それを行うためのマクロを作成します。これは次のようになります。

(make-config 
  config-db "URI_DB"
  config-time (hours 1))

(または、名前をベクトル内に入れて、letステートメントのように見せることもできます)

しかし、私が複数のカップルを置くとき、私は問題を抱えています、私はこれをしました:

(defmacro define-config
  [name definition]
  `(def ~name ~definition))

しかし、私はこれをもっと便利なものに拡張する方法に本当に接着剤を持っていません...

何か提案やアイデアはありますか?

4

1 に答える 1

10

defそれぞれを個別に行うことを強くお勧めします。このマクロは簡単ですが、あまり役に立ちません。誰かが見るときdef、彼らは何が起こっているのかを正確に知っています。彼らがあなたのカスタムコールを見るとき、彼らは何が起こっているのかを知るためmake-configにの実装を見る必要があります。make-config大きな例ではいくつかの文字が削除され、読みやすさが失われます。

そうは言っても、これを簡単に行うためのマクロを作成できます。

(defmacro make-config [& forms]
  `(do ~@(for [[name body] (partition 2 forms)]
           `(def ~name ~body))))

そして使用例:

user=> (make-config foo "foo" bar (str "b" "a" "r"))
#'user/bar
user=> foo
"foo"
user=> bar
"bar"
于 2012-10-13T22:16:43.427 に答える