0

次の 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-testmy-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 の質問の複製ではないようです。requirerefer

EDIT:以下も役に立たない

(add (records.core/my-vector. []) 42)
(add (#'records.core/my-vector. []) 42)
(add (@#'records.core/my-vector. []) 42)
4

1 に答える 1