クロスオーバー名前空間にプロトコルがあります。
(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 コードに依存しているため、それを関数に分割する必要があります。それはこれを行うためのより良い方法でしょうか?
ありがとう!