int*_*tar 7 clojure clojure-protocol
似乎Clojure编译器默认不执行此操作:Clojure编译器是否检查记录和类型是否实现协议?
任何,比方说,Lein插件这样做?
令人惊奇的core.typed是引入了“Clojure 的可选类型系统”,您可以在他们的官方网站上看到。
具体来说,您可能想使用他们自己的defprotocol宏(来自 core.typed wiki):
协议定义应该使用 clojure.core.typed/defprotocol ,其语法让人想起 defprotocol 和 typed fn:
Run Code Online (Sandbox Code Playgroud)(defprotocol IUnifyWithLVar (unify-with-lvar [v u :- LVar s :- ISubstitutions] :- (U ISubstitutions Fail)))支持多态协议:
Run Code Online (Sandbox Code Playgroud)(defprotocol [a b] Lens (-fetch [l x :- a] :- b) (-putback [l x :- a v :- b] :- a))
安装后,您可以通过 leiningen 运行它lein typed check。明显的缺点是您必须对代码进行注释。这是通过使用静态类型检查来提高代码安全性所付出的成本。
您可能还对函数satisfies?, 和感兴趣instance?。