如何处理函数参数中可选键的重映射

时间:2011-09-08 15:07:42

标签: map clojure

我有一个带参数的Clojure函数:[{:keys [from to]}]fromto键都是可选的。我想将这些键重新映射到新键,但保持值。什么是有效/惯用的方式来解决这个问题?这是我最好的解决方案。

(defn query
  [{:keys [from to]}]
  (let [re-map  {:$gte from
                 :$lt  to}]
    (into {} (remove #(nil? (val %)) re-map))))

我需要它返回一个或两个,如果没有输入其中一个键,则不需要。所以

=>(query {:from 10}) 
{:$gte 10} 

=>(query {:from 10 :to 20})
{:$gte 10 :lt 20}

2 个答案:

答案 0 :(得分:2)

在名为clojure.setrename-keys命名空间中有一个函数:

user=> (use 'clojure.set)
nil
user=> (rename-keys {:from 10} {:from :$gte :to :$lt})
{:$gte 10}

答案 1 :(得分:1)

您可以使用解构:

user=> (defn re-map [{the-x :x the-y :y}] the-x)
user=> (re-map {:x 10 :y 1})  
10

我会推荐this很多例子的优秀介绍。