我正在尝试使用类型提示来区分两个单参数方法。
例如,add-vertex 包装了一个 Java 方法,该方法可以采用可变数量的 args,所以在这里我试图让 add-vertex 采用零、一个或两个 args...
(defmulti add-vertex (fn [& args] (map class args)))
(defmethod add-vertex [] (add-vertex nil nil))
(defmethod add-vertex Integer [id] (add-vertex id nil))
(defmethod add-vertex Map [props] (add-vertex nil props))
(defmethod add-vertex [Integer Map] [id props]
((let [vertex (. *g* addVertex id)]
(when props
(apply set-props vertex (interleave (map name (keys props)) (vals props))))
vertex)))
请注意,有两个单参数函数——每个函数采用不同的类型(id 是 Java Integer,props 是 Java Map)。我是 Clojure 的新手,所以我怀疑我这样做完全错误。