有条件地添加到集合中

aar*_*use 0 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"]
Run Code Online (Sandbox Code Playgroud)

我对Clojure很陌生,但对于一个常见的操作来说,这似乎是一个笨重的解决方案.是否有更优雅的方式来解决这个问题?

Thu*_*ail 5

我们可以简化make-zoo使用cond->宏,->线程宏的条件导数:

(defn make-zoo [zoo has-ice]
  (cond-> zoo, has-ice (conj "penguins")))
Run Code Online (Sandbox Code Playgroud)