Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Map 如何处理函数参数中可选键的重新映射_Map_Clojure - Fatal编程技术网

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

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)))) 我需要它返回其中一个或两个,如

我有一个Clojure函数,参数为:
[{: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}