Компилятор Clojure проверяет, реализуют ли записи и типы протоколы?
Предназначен ли компилятор Clojure для проверки, реализует ли запись или тип, который говорит, что он создает протокол, методы, перечисленные в нем?
Я пробую это сейчас и пока, похоже, нет.
1 ответ
Решение
Запись может реализовывать протокол без реализации любого из его методов:
(defprotocol Structure
(weight [this])
(balanced? [this]))
(defrecord Mobile []
Structure
)
... принято.
Если вы попытаетесь использовать несуществующий метод:
(balanced? (Mobile.))
;java.lang.AbstractMethodError: user.Mobile.balanced_QMARK_()Ljava/lang/Object;
Как обычно, ошибки типа обнаруживаются во время выполнения.