(defn sort-map-by-value
"Given a map return a sorted map, in which the sort is done on the map's values, instead of keys.
Takes a function as an input, which will be used for sorting"
[cf kf]
(fn [m]
(->> m
map-invert
(into (sorted-map-by #(cf (kf %1) (kf %2))))
map-invert)))
(defn date-time-comparator
"Predicate function for comparing two date-time's"
[time1 time2]
(before? time1 time2))
(defn get-time-value
"Function for extracting the date-time from the value of the given map."
[v]
(-> v first :time))
(def sort-map-by-date (sort-map-by-value date-time-comparator get-time-value))
(sort-map-by-date {"3-19-2013" [{:time (date-time 2013 3 19 12 14 45)}]
"3-9-2013" [{:time (date-time 2013 3 9 16 46 49)}]
"2-25-2013" [{:time (date-time 2013 2 25 2 38 15)}]
"3-14-2013" [{:time (date-time 2013 3 14 7 19 23)}]
"2-8-2013" [{:time (date-time 2013 2 8 12 44 47)}]
})
我试图了解使用高阶函数的惯用模式是什么。专门针对返回函数的函数。第一个函数 sort-map-by-value,以 2 个 fns 作为参数并返回一个以 map 作为参数的函数。
上述函数也可以将这三个函数、2 个函数和映射作为参数。所以在这种情况下不需要创建一个返回另一个函数的函数。需要它的情况是什么。或者换句话说,引入返回函数的函数的惯用模式是什么?