我想根据条件向集合中添加内容,否则就不管它了。
我发现自己写的是这样的:
(defn make-zoo
[zoo has-ice]
(let [zoo (if has-ice (conj zoo "penguins") zoo)]
zoo))
(make-zoo ["tigers"] false) ;["tigers"]
(make-zoo ["polar bears"] true) ;["polar bears" "penguins"]
我对Clojure很陌生,但对于常见的操作来说,这似乎是一个笨重的解决方案。有没有更优雅的方式解决这个问题?
答案 0 :(得分:5)
我们可以使用make-zoo
宏来简化cond->
,这是->
线程宏的条件派生词:
(defn make-zoo [zoo has-ice]
(cond-> zoo, has-ice (conj "penguins")))
答案 1 :(得分:3)
一个简化就是省略let
声明:
(defn make-zoo
[zoo has-ice]
(if has-ice
(conj zoo "penguins")
zoo))
(make-zoo ["tigers"] false) => ["tigers"]
(make-zoo ["polar bears"] true) => ["polar bears" "penguins"]