使用#()代替(fn ...)in(sorted-map-by ...)

kaf*_*ein 2 clojure anonymous-function

我想将以下代码段中的内部函数调用转换为使用#()宏的内部函数调用:

(let [m {:a 3, :b 2, :c 4, :x 9, :y 0, :z 5}]
  (into (sorted-map-by (fn [key1 key2]
                         (compare [(get m key2)]
                                  [(get m key1)]))) m))
Run Code Online (Sandbox Code Playgroud)

我对如何实现这一点感到有点困惑.

Lee*_*Lee 5

在匿名函数内部,参数由%1,%2 ...给出,因此您可以使用

(let [m {:a 3, :b 2, :c 4, :x 9, :y 0, :z 5}]
  (into (sorted-map-by #(compare (get m %2)
                                 (get m %1))) m))
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要在向量中包装比较值.