次の leiningen プロジェクトcore.clj
ファイルを検討してください。
(ns records.core)
(defn hello [] "hello")
(defprotocol my-sequence
(add [seqq item]))
(defrecord my-vector [coll]
my-sequence
(add [_ item] (conj coll item)))
これをコンパイルして、次のように REPL でテストできます。
records.core> (hello)
"hello"
records.core> (add (my-vector. []) 42)
[42]
しかし、これを次のように leiningen 単体テスト ファイルに転記すると、次のようになります。
(ns records.core-test
(:require [clojure.test :refer :all]
[records.core :refer :all]))
(deftest a-test
(testing "adding to a my-vector"
(is (= (hello) "hello"))
#_(is (= [42] (add (my-vector. []) 42)))))
最初のテストは成功し、シンボルが名前空間にhello
正しく移動されていることを示していますが、のテストではコンパイラ エラーがスローされます (上記の 2 行目の を削除します)。records.core-test
my-vector
#_
clojure.lang.Compiler$CompilerException: java.lang.IllegalArgumentException:
Unable to resolve classname: my-vector, compiling:
(.../records/test/records/core_test.clj:8:22)
その質問への回答が示唆したように、私はandを使用しているため、これはこの SO の質問の複製ではないようです。require
refer
EDIT:以下も役に立たない
(add (records.core/my-vector. []) 42)
(add (#'records.core/my-vector. []) 42)
(add (@#'records.core/my-vector. []) 42)