返回函数中未传递为nil的args

时间:2019-08-01 13:56:18

标签: dictionary clojure defn

(defn bar[{:keys [a b] :as args}] (prn "got" args))

如果我们将上述函数调用为

(bar {:a 1})

返回

{:a 1}
nil 

我想拥有

{:a 1 :b nil}

2 个答案:

答案 0 :(得分:4)

我认为如果不更改Clojure的解构代码的实现,就无法做到这一点。低于令人满意吗?

user=> (defn bar [{:keys [a b]}] (prn "got" {:a a, :b b}))
#'user/bar
user=> (bar {:a 1})
"got" {:a 1, :b nil}

答案 1 :(得分:1)

不确定是否值得这么做,但是您可以使用vals->mapfrom the Tupelo library来进一步了解:

(defn whiffer
  [{:keys [a b]}]
  (vals->map a b) )

结果:

(whiffer {:a 1, :b 2})  => {:a 1, :b 2}
(whiffer {:a 1})        => {:a 1, :b nil}