我有一個協議叫做IExample
和我定義了一個記錄類型A
實現它:clojure:我可以定義一個隱式轉換possility嗎?
(defprotocol IExample
(foo [this] "do something")
(bar [this] "do something else"))
(defrecord A [field1 field2]
IExample
(foo [this]
(+ field1 field2))
(bar [this]
(- field1 field2)))
比方說,我想對另一個(基本)類型B
實施這一協議,但我知道如何從轉換B
到A
:
(defn B-to-A
"converts a B object to an A object"
[Bobj] ...)
,因爲我有這樣的轉變,我可以委派對B
到的IExample
協議 的所有呼叫3210協議上的A
通過委派它們:
(extend B
IExample {
:foo (fn [this] (foo (B-to-A this)))
:bar (fn [this] (bar (B-to-A this)))})
然而,這似乎非常多的樣板(特別是對於較大的協議) 未Clojure的-慣用。
我怎麼能告訴Clojure的只是每一個 功能IExample
被稱爲B
對象時隱式轉換B
到A
,使用B-to-A
功能?