1

Clojure 编译器是否旨在检查表明它实例化协议的记录或类型是否实际上实现了其中列出的方法?

我现在正在尝试这个,到目前为止,它似乎没有。

4

1 回答 1

1

记录可以在不实现协议的任何方法的情况下实现协议:

(defprotocol Structure
  (weight [this])
  (balanced? [this]))

(defrecord Mobile []
  Structure
  )

...被接受。

如果您尝试使用不存在的方法:

(balanced? (Mobile.))

;java.lang.AbstractMethodError: user.Mobile.balanced_QMARK_()Ljava/lang/Object;

像往常一样,在运行时会发现类型错误。

于 2015-08-15T15:40:41.263 回答