在clojure中,我如何需要多方法?

时间:2011-04-20 19:05:42

标签: clojure

我知道我可以做(:use function)但是我如何为多方法做到这一点?

1 个答案:

答案 0 :(得分:7)

Multimethods以与函数相同的方式从其他命名空间中使用。

如果你在com / example / foo.clj

中有以下内容
(ns com.example.foo)

(defn f [x]
  (* x x))

(defmulti m first)

(defmethod m :a [coll]
  (map inc (rest coll)))

在文件com / example / bar.clj中,您可以以相同的方式同时使用f和m:

(ns com.example.bar
  (:use [com.example.foo :only [f m]]))

(defn g []
  (println (f 5)) ; Call the function
  (println (m [:a 1 2 3]))) ; Call the multimethod

;; You can also define new cases for the multimethod defined in foo
;; which are then available everywhere m is
(defmethod m :b [coll]
  (map dec (rest coll)))

我希望这能回答你的问题!