(defn bar[{:keys [a b] :as args}] (prn "got" args))
如果我们将上述函数调用为
(bar {:a 1})
它返回
{:a 1}
nil
我希望有
{:a 1 :b nil}
(defn bar[{:keys [a b] :as args}] (prn "got" args))
如果我们将上述函数调用为
(bar {:a 1})
它返回
{:a 1}
nil
我希望有
{:a 1 :b nil}
我认为如果不更改 Clojure 解构代码的实现,就无法做到这一点。以下是否令人满意?
user=> (defn bar [{:keys [a b]}] (prn "got" {:a a, :b b}))
#'user/bar
user=> (bar {:a 1})
"got" {:a 1, :b nil}
不确定是否值得麻烦,但您可以使用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}