【发布时间】:2014-02-12 05:15:46
【问题描述】:
也许只是太晚了,但我似乎无法弄清楚这一点。我正在创建看起来像这样的东西
(defn new-psf
[props]
(let [psf (Psf.)]
(if (contains? props :pageLn)
(.setPageLn psf (props :pageLn)))
(if (contains? props :pageNum)
(.setPageNum psf (props :pageLn)))
(if (contains? props :includedSources)
(doseq [s (props :includedSources)]
(.add (.getIncludedSources psf) s)))
psf))
现在这看起来很丑陋,我不得不认为重复模式在 Clojure 中有一种更简洁的方式。 cond* 函数似乎都不适合。我自己的宏还不够好,无法创建新的东西。
任何人对宏有任何想法可以让我做这样的事情:
(defn new-psf
[props]
(let [psf (Psf.)]
(condd (partial contains? props)
:pageLn (.setPageLn psf (props :pageLn))
:pageNum (.setPageNum psf (props :pageNum))
:includedSources (doseq [s (props :includedSources)]
(.add (.getIncludedSources psf) s)))
psf))
【问题讨论】:
标签: clojure