我在交叉命名空间中有一个协议:
(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 代码,所以我需要将其分解为一个函数。这会是解决这个问题的更好方法吗?
谢谢!