我正在为勇敢和真实的Clojure开始工作example:
(ns the-divine-cheese-code.visualization.svg
(:require [clojure.string :as s])
(:refer-clojure :exclude [min max]))
(defn comparator-over-maps
[comparison-fn ks]
(fn [maps]
(zipmap ks
(map (fn [k] (apply comparison-fn (map k maps)))
ks))))
(def min (comparator-over-maps clojure.core/min [:lat :lng]))
(def max (comparator-over-maps clojure.core/max [:lat :lng]))
当我尝试在CIDER REPL中运行以下代码时,我得到一个空指针异常:
(min [{:a 1 :b 3} {:a 5 :b 0}])
我正在尝试识别代码中的错误来源。任何帮助肯定会受到赞赏。
答案 0 :(得分:3)
函数comparator-over-maps
使用您传递的关键字向量来查找地图中的值。在这种情况下,您传递的地图包含密钥:a
和:b
,但您对min
的定义是请求密钥:lat
和:lng
,它不存在 - 所以它接收nil
,这是NPE的原因。如果您更改一个或另一组关键字以匹配,则该示例应该有效,例如:
(min [{:lat 1 :lng 3} {:lat 5 :lng 0}])
答案 1 :(得分:0)
根据@ BlackBear的评论,我将CIDER REPL中的代码重新命名为:
(min [{:lat 1 :lng 3} {:lat 5 :lng 0}])
它产生了正确的答案:
=> {:lat 1, :lng 0}
感谢您的帮助!