Clojure映射在需要单个键的函数中进行解构

时间:2015-08-27 09:42:12

标签: clojure

我目前已经实现了一种方法,可以按照地图中的深键进行排序:

(sort-by #(get-in % [:layer :order]) [{:layer {:order 1} {:layer {:order 2}])

我想知道是否有办法使用地图解构来做到这一点?这可用于let以外的函数和参数定义吗?我想知道的一个例子是:

(sort-by {:layer {:order}} [{:layer {:order 1} {:layer {:order 2}])

1 个答案:

答案 0 :(得分:1)

据我所知,你只能在let绑定或函数绑定中进行解构。这是您使用嵌套地图解构的方法:

(sort-by (fn [{{o :order} :layer}] o)
         [{:layer {:order 2}}
          {:layer {:order 1}}])
但是,我不认为这更清楚。由于关键字是函数,您还可以使用普通的旧函数组合:

(sort-by (comp :order :layer)
         [{:layer {:order 2}}
          {:layer {:order 1}}])