以下是本文中的工作:
(defprotocol MyProtocol
(foo [this]))
(deftype A []
MyProtocol
(foo [this] "a"))
(deftype B []
MyProtocol
(foo [this] "b"))
(deftype C []
MyProtocol
(foo [this] (str (foo (A.)) (foo (B.)))))当我试图将每个实例移动到一个单独的文件以减少耦合时,我会在C上得到以下错误:“无法在此上下文中解析符号: foo”
样本布局:
;; my_protocol.clj
(ns my-protocol)
(defprotocol MyProtocol
(foo [this]))
;; type_a.clj
(ns type-a
(:require my-protocol :refer [MyProtocol])
(deftype A []
MyProtocol
(foo [this] "a"))
;; type_b.clj
(ns type-b
(:require my-protocol :refer [MyProtocol])
(deftype B []
MyProtocol
(foo [this] "b"))
;; type_c.clj
(ns type-c
(:import [type_a A]
[type_b B])
(:require my-protocol :refer [MyProtocol])
(deftype C []
MyProtocol
(foo [this] (str (foo (A.)) (foo (B.))))) 发布于 2016-05-31 17:57:17
(ns type-a
(:require my-protocol :refer [MyProtocol])您引用了协议,但从未引用过foo,因此当您试图调用foo时,编译器不知道您的意思。相反,写:
(ns type-a
(:require my-protocol :refer [MyProtocol foo])https://stackoverflow.com/questions/37552231
复制相似问题