之間的協議,我有一個交叉的命名空間的協議:如何共享的Clojure和ClojureScript
(ns xxx.shared.interfaces)
(defprotocol ITimer
(seconds [timer] "Return time in seconds since timer began"))
我有Clojure的實現:
(ns xxx.time
(:require [xxx.shared.interfaces :refer [ITimer]]))
(defrecord Timer [start-nanos]
ITimer
(seconds [timer] (double (/ (- (System/nanoTime) (:start-nanos timer))
1000000000))))
的問題是,當我使用此代碼在一些Clojure代碼中,要求xxx.time
命名空間與:refer :all
它抱怨它找不到seconds
:
Unable to resolve symbol: seconds in this context
首先,是否有可能以這種方式共享協議?
其次,任何想法我可以使這項工作?
第三,這實際上是一種很好的方式去關於這種代碼共享?理想情況下,我也想分享這個記錄,但它依賴於Java代碼,所以我需要將其分解爲一個函數。這會是一個更好的方式來解決這個問題嗎?
謝謝!
至於代碼共享的問題,我認爲可以共享任何作爲共享代碼的東西並分析協議方法的平臺特定實現當然是使更多代碼可共享的有效方法。是否值得這可能取決於實際避免多少重複。無論如何,如上所述,原始問題與共享無關。 –