Tôi có một số mã sử dụng nhiều phương pháp và lý tưởng là quá tải chức năng (trong trường hợp này là đa chức năng) để tôi có thể vượt qua trong một hàm bậc cao hơn để giúp thử nghiệm, ví dụ.Có thể quá tải Clojure đa phương pháp trên tinh thần không?
Dưới đây là ví dụ:
(ns multi)
(defn my-print [m] (println "The colour is" (:colour m)))
(defmulti which-colour-mm (fn [m f] (:colour m)))
(defmethod which-colour-mm :blue [m f] (f m))
(defmethod which-colour-mm :red [m f] (f m))
(defmethod which-colour-mm :default [m f] (println "Default: Neither Blue nor Red"))
(defn which-colour
([m] (which-colour-mm m my-print))
([m f] (which-colour-mm m f)))
(which-colour {:colour :blue :object :ball})
(which-colour {:colour :yellow :object :ball})
(which-colour {:colour :blue :animal :parrot} (fn [m] (println "The " (:animal m) "is" (:colour m))))
Vì vậy defn tôi cung cấp các arity quá tải nhưng tôi tự hỏi nếu defmethod hỗ trợ bất cứ điều gì như thế này. (Tôi đoán bạn sẽ không muốn làm điều đó cho từng tờ khai defmethod.)
Đây có phải là thích hợp nhất (tôi dám nói, ngữ) cách tiếp cận, hoặc là có một cách tốt hơn?
tôi thích video này và câu trả lời Ankur, nhưng một này sử dụng arity quá tải v s khác mà sử dụng các đối số đếm để phù hợp với giá trị công văn. Tôi đoán nó có ý nghĩa để sử dụng cách tiếp cận defn nếu bạn muốn cùng một chức năng mặc định cho mỗi giá trị công văn (và tránh trùng lặp) vs quá tải ở mức defmethod nếu bạn muốn một mặc định khác nhau cho mỗi giá trị công văn. –