Реализация мультиметода в отдельных файлах в другом пространстве имен

Я пытаюсь определить мультиметод и его реализацию в отдельном файле. Это выглядит примерно так: в файле 1

(ns thing.a.b)
(defn dispatch-fn [x] x)
(defmulti foo dispatch-fn)

В файле 2

(ns thing.a.b.c
  (:require [thing.a.b :refer [foo]])
(defmethod foo "hello" [s] s)
(defmethod foo "goodbye" [s] "TATA")

И в основном файле, когда я вызываю метод, я определяю что-то вроде этого:

(ns thing.a.e
  (:require thing.a.b :as test))
.
.
.
(test/foo "hello")

Когда я делаю это, я получаю исключение, говорящее "No method in multimethod 'foo'for dispatch value: hello

Что я делаю неправильно? Или невозможно определить реализации мультиметодов в отдельных файлах?

1 ответ

Решение

Это возможно. Проблема в том, что thing.a.b.c пространство имен не загружено. Вы должны загрузить его перед использованием.

Это правильный пример:

(ns thing.a.e
  (:require
    [thing.a.b.c] ; Here all your defmethods loaded
    [thing.a.b :as test]))

(test/foo "hello")
Другие вопросы по тегам