我如何访问 Clojure 库中的记录?

How can I access a record in a library in Clojure?

我正在编写一个实现协议的库并尝试访问命名空间外的记录。

storage.clj 包含记录:

(defrecord FrienduiStorage []
  f-glob/FrienduiStorage
  (get-all-users [this]
   (db/get-all-users)))

我是这样要求的[sventechie.friendui-mysql.storage :refer :all]。 然后像这样实例化它 (def FrienduiStorageImpl (->FrienduiStorage)) 但这不起作用:(get-all-users (FrienduiStorageImpl)) "RuntimeException: Unable to resolve symbol: get-all-users in this context"。我做错了什么?

完整的库存储库位于 (http://github.com/sventechie/friendui-mysql/)。 我做了一个最小用法示例 (http://github.com/sventechie/friendui-mysql-example/)。

要将@mavbozo 对您问题的评论形式化为答案,您需要向常规 class

添加导入

所以定义是

(ns sventechie.friendui-mysql.storage)
(defrecord FrienduiStorage [])

用法是:

(ns somewhere.else
  (:require [sventechie.friendui-mysql.storage :refer :all])
  (:import [sventechie.friendui-mysql.storage.FrienduiStorage]))