有条件地添加到集合中

时间:2017-01-05 05:50:24

标签: clojure

我想根据条件向集合中添加内容,否则就不管它了。

我发现自己写的是这样的:

(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很陌生,但对于常见的操作来说,这似乎是一个笨重的解决方案。有没有更优雅的方式解决这个问题?

2 个答案:

答案 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"]
相关问题