7

似乎 Clojure 编译器默认不这样做:Clojure 编译器是否检查记录和类型是否实现协议?

有没有可以做到这一点的 Lein 插件?

4

1 回答 1

3

令人惊叹的core.typed引入了“Clojure 的可选类型系统”,您可以在他们的官方网站上看到。

具体来说,您可能想要使用自己的defprotocol宏(来自 core.typed wiki):

协议定义应该使用 clojure.core.typed/defprotocol,其语法让人想起 defprotocol 和类型化 fn:

(defprotocol IUnifyWithLVar
  (unify-with-lvar [v u :- LVar s :- ISubstitutions] :- (U ISubstitutions Fail)))

支持多态协议:

(defprotocol [a b] Lens
   (-fetch [l x :- a] :- b)
   (-putback [l x :- a v :- b] :- a))

安装后,您可以通过 leiningen使用lein typed check. 明显的缺点是您必须注释您的代码。这是通过使用静态类型检查来提高代码安全性所付出的代价。

您可能还对函数satisfies?和感兴趣instance?

于 2015-08-15T22:25:53.607 回答