是否有Clojure编译时工具来检查记录或类型是否实际实现了它声称的协议?

是否有Clojure编译时工具来检查记录或类型是否实际实现了它声称的协议?,clojure,clojure-protocol,Clojure,Clojure Protocol,Clojure编译器在默认情况下似乎不这样做: 比如说,有没有可以做到这一点的Lein插件?这部神奇的作品引入了“Clojure的可选类型系统”,正如你在他们的网站上看到的那样 具体来说,您可能需要使用自己的defprotocolmacro(): 协议定义应使用clojure.core.typed/defprotocol 语法让人联想到defprotocol和类型化fn: (defprotocol IUnifyWithLVar (unify-with-lvar [v u :- LVar s

Clojure编译器在默认情况下似乎不这样做:

比如说,有没有可以做到这一点的Lein插件?

这部神奇的作品引入了“Clojure的可选类型系统”,正如你在他们的网站上看到的那样

具体来说,您可能需要使用自己的
defprotocol
macro():

协议定义应使用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键入的check
。 明显的缺点是必须对代码进行注释。这是通过使用静态类型检查来提高代码安全性的成本


您可能也对这些函数感兴趣,并且。

是否将
满足?
实例?
验证某些接口或协议是否已完全实现?只有与core.typed结合使用,它们才是完全独立的东西
core.typed
是一个类型检查器,而另外两个是函数,必须在运行时调用(
满足?
对于协议很有用,而不是
即时?
,但为了完整性,我将其包括在内)。同样,它们是完全独立的。好吧,我问的原因是,据我所知,这两个函数都不能告诉您某个对象是否实现了特定的接口或协议方法;;如果x满足协议,则返回true我不确定您在说什么。是@noisesmith,满足吗?似乎只测试记录是否实现了协议,而不测试它是否实际拥有所有命名方法。