我刚刚在 clojure.spec 上看到了Rich 的演讲之一,我真的很想在我的项目中试一试。我正在编写一系列使用eclipse CDT 库解析 C 代码的工具,并且我想指定我的函数接受和发出 AST 对象。
我认为可以为一个函数编写一个非常基本的规范,该函数采用 AST 的根并发出所有树的叶子,如下所示:
(import '(org.eclipse.cdt.core.dom.ast IASTNode))
(require '[clojure.spec :as s])
(defn ast-node? [node] (instance? IASTNode node))
(s/def ::ast-node ast-node?)
(s/fdef leaves :args ::ast-node :ret (s/coll-of ::ast-node))
但是,当我尝试执行代码时(s/exercise leaves)
,出现错误:
Unable to construct gen at: [] for:
xxx.x$leaves@xxx
#:clojure.spec{:path [], :form #function[xxx.xxx/leaves], :failure :no-gen}
如何为 Java 对象编写自定义生成器以完全规范和练习我的代码?