3
在REPL以下工作:當他們都生活在不同的文件中時,如何將兩個deftypes組合成新的deftype?
(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.)))))
我認爲你的意思*耦合*。你通常希望擁有高*內聚*和低*耦合*。我現在無法測試,但我會先嚐試完全驗證'foo',例如'我的協議/ foo'。 – coredump
內聚/耦合的好處。編輯。 –