Компилятор Clojure проверяет, реализуют ли записи и типы протоколы?

Предназначен ли компилятор Clojure для проверки, реализует ли запись или тип, который говорит, что он создает протокол, методы, перечисленные в нем?

Я пробую это сейчас и пока, похоже, нет.

1 ответ

Решение

Запись может реализовывать протокол без реализации любого из его методов:

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

(defrecord Mobile []
  Structure
  )

... принято.

Если вы попытаетесь использовать несуществующий метод:

(balanced? (Mobile.))

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

Как обычно, ошибки типа обнаруживаются во время выполнения.

Другие вопросы по тегам