【问题标题】:How to handle re-mapping of optional keys in function parameter如何处理函数参数中可选键的重新映射
【发布时间】:2011-09-08 15:07:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: map clojure


    【解决方案1】:

    clojure.set 命名空间中有一个函数,称为rename-keys

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

    【讨论】:

      【解决方案2】:

      您可以为此使用解构:

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

      我会推荐this 优秀的介绍,并附有大量示例。

      【讨论】:

      • 我编辑了我的问题以澄清回报不应该为零。谢谢!
      • 真的不清楚你想要完成什么。您说“我需要它返回一个或两个,如果没有输入其中一个键,则不返回 nil。”,但这正是简单的“(defn fun [point] point)”所做的。例如。 "(fun {:x 10 :y 20}) => {:x 10 y :20}", (fun {:x 10}) => {:x 10}"。
      • 在运行时做出选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2019-05-24
      • 2012-12-10
      • 2018-11-02
      • 2019-04-21
      • 2019-12-12
      相关资源
      最近更新 更多