【发布时间】:2017-05-01 19:05:57
【问题描述】:
我刚刚在 clojure.spec 上看到了 Rich's talks 之一,我真的很想在我的项目中试一试。我正在编写一系列使用 eclipse CDT library 解析 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 对象编写自定义生成器以完全规范和运行我的代码?
【问题讨论】:
标签: clojure clojure.spec