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

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

(bar {:a 1})

它返回

{:a 1}
nil 

我希望有

{:a 1 :b nil}
4

2 回答 2

5

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

user=> (defn bar [{:keys [a b]}] (prn "got" {:a a, :b b}))
#'user/bar
user=> (bar {:a 1})
"got" {:a 1, :b nil}
于 2019-08-01T14:12:28.473 回答
1

不确定是否值得麻烦,但您可以使用Tupelo 库vals->map中的宏更接近:

(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}
于 2019-08-01T22:21:12.157 回答