【发布时间】:2019-08-01 13:56:18
【问题描述】:
(defn bar[{:keys [a b] :as args}] (prn "got" args))
如果我们将上述函数调用为
(bar {:a 1})
返回
{:a 1}
nil
我想拥有
{:a 1 :b nil}
【问题讨论】:
标签: dictionary clojure defn
(defn bar[{:keys [a b] :as args}] (prn "got" args))
如果我们将上述函数调用为
(bar {:a 1})
返回
{:a 1}
nil
我想拥有
{:a 1 :b nil}
【问题讨论】:
标签: dictionary clojure defn
我认为如果不更改 Clojure 解构代码的实现,就无法做到这一点。低于满意吗?
user=> (defn bar [{:keys [a b]}] (prn "got" {:a a, :b b}))
#'user/bar
user=> (bar {:a 1})
"got" {:a 1, :b nil}
【讨论】:
不确定是否值得麻烦,但您可以使用 vals->map 宏 from 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}
【讨论】: