2016-07-12 13 views
2

マルチメソッドとその実装を別々のファイルに定義しようとしています。異なる名前空間の別々のファイルにマルチメソッドを実装する

(ns thing.a.e 
    (:require thing.a.b :as test)) 
. 
. 
. 
(test/foo "hello") 
:私はこのような何かを定義する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") 

では、メインファイル内のファイルでは :それはこのような何かを行きます

私はこれを行うと例外があると言うでしょう"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") 
関連する問題