Map 如何处理函数参数中可选键的重新映射
我有一个Clojure函数,参数为:Map 如何处理函数参数中可选键的重新映射,map,clojure,Map,Clojure,我有一个Clojure函数,参数为:[{:keys[from to]}]。from和to键都是可选的。我希望将这些键重新映射为新键,但保留值。什么是一种有效/惯用的方法?这是我目前的解决办法 (defn query [{:keys [from to]}] (let [re-map {:$gte from :$lt to}] (into {} (remove #(nil? (val %)) re-map)))) 我需要它返回其中一个或两个,如
[{:keys[from to]}]
。from
和to
键都是可选的。我希望将这些键重新映射为新键,但保留值。什么是一种有效/惯用的方法?这是我目前的解决办法
(defn query
[{:keys [from to]}]
(let [re-map {:$gte from
:$lt to}]
(into {} (remove #(nil? (val %)) re-map))))
我需要它返回其中一个或两个,如果没有输入其中一个密钥,则不返回nil。所以
=>(query {:from 10})
{:$gte 10}
及
您可以为此使用分解:
user=> (defn re-map [{the-x :x the-y :y}] the-x)
user=> (re-map {:x 10 :y 1})
10
我建议您进行精彩的介绍,并提供大量示例。在名称空间中有一个用于此目的的函数,名为:
我编辑了我的问题,以澄清报税表不应为零。谢谢你想完成什么真的很难理解。您会说“我需要它返回一个或两个,如果其中一个键没有输入,则不返回nil”,但这正是simple“(defn-fun[point]point)”所做的。例如“(fun{:x10:y20})=>{:x10y:20}”,(fun{:x10})=>{:x10}”。在运行时进行选择
user=> (defn re-map [{the-x :x the-y :y}] the-x)
user=> (re-map {:x 10 :y 1})
10
user=> (use 'clojure.set)
nil
user=> (rename-keys {:from 10} {:from :$gte :to :$lt})
{:$gte 10}