场景:我想使用多方法在多个文件之间分派和传播功能。其中一个文件只包含多方法,为了使它们可用,我必须手动加载文件。有没有办法自动加载文件,而不是显式加载它?
这是我正在做的一个简单示例:
; app/core.clj
(ns app.core
(:use [app.fruit.core :only [make-fruit]])
(println (:name (make-fruit :banana)))
; app/fruit/core.clj
(ns app.fruit.core)
(defmulti make-fruit identity)
; app/fruit/banana.clj
(ns app.fruit.banana
(:use [app.fruit.core :only [make-fruit]])
(defmethod make-fruit :banana [fruit]
{:name "banana" :color "yellow})
除非我在 app.core 中明确加载,否则不会加载fruit.banana 的方法,例如将其添加到 :use 组中。这似乎违背了使用多方法的目的,因为我仍然必须明确说明实现它的所有方法。