2

クロスオーバー名前空間にプロトコルがあります。

(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 コードに依存しているため、それを関数に分割する必要があります。それはこれを行うためのより良い方法でしょうか?

ありがとう!

4

1 に答える 1