2016-07-12 3 views
2

Я пытаюсь определить мультиметод и его реализацию в отдельном файле. Это идет что-то вроде этого: В файле 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

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

ответ

4

Возможно. Проблема в том, что пространство имен 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") 
Смежные вопросы