我正在使用Clojure测试deftype和defprotocol,但我遇到了一点麻烦。
我用的是leiningen。我的核心文件(src/core.clj)如下所示:
(defprotocol Speaker
(say [speaker message]))
(deftype Person [name]
Speaker
(say [_ message] (str name ": " message)))我的测试文件(test/core.clj)如下所示:
(deftest people-can-talk
(is (= "Peter: hello" (say (Person. "Peter") "hello"))))当我执行该测试(使用lein test)时,我得到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to resolve classname: Person, compiling:(my-project/test/core.clj:2)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6416)
at clojure.lang.Compiler.analyze(Compiler.java:6216)我相信它是在告诉我Person没有定义。但它是!如果不是,Clojure不会抛出错误吗?我是不是遗漏了什么明显的语法错误?
我使用的是clojure 1.3.0。
发布于 2011-11-20 22:09:12
要在另一个包/文件中使用由deftype定义的类,您需要(导入)它们,或者提供完整的包名,比如(core.Person. "Peter") -或者core.clj的任何名称空间。
此外,"lein test“只加载测试文件。如果要引用另一个文件中的任何内容,则需要在测试文件中使用或要求使用该文件。
发布于 2014-12-30 20:44:14
您的建议没有为我解决类引用错误。但实现如下所述的“工厂方法”是一种变通方法:another stackoverflow answer on this issue
https://stackoverflow.com/questions/8201933
复制相似问题