Подтвердить что ты не робот

Deftype против defrecord

Хотя defrecord является предпочтительной формой - для общего случая - Clojure для определения "сущности", в ClojureScript можно найти гораздо больше ссылок на deftype, как показано в различные .

В чем разница между обеими формами? Что нужно предпочесть?

4b9b3361

Ответ 1

deftype создает объект bare-bones, который реализует протокол.

defrecord создает неизменяемую постоянную карту, которая реализует протокол.

Что использовать зависит от того, что вы хотите. Вам нужна полная структура данных ClojureScript? Затем используйте запись. Вы просто хотите, чтобы голова не делала ничего, кроме удовлетворения протокола? Затем используйте тип.

Два бита документации, которые вы ссылаетесь на типы использования, потому что они пытаются проиллюстрировать протоколы на самом базовом уровне, а типы имеют меньшее значение, чем записи, так сказать.

Однако в большинстве случаев объектно-подобные вещи в режиме реального времени в Clojure/ClojureScript необходимо хранить поля данных вместе с объектом, и для этого вы должны решительно использовать запись, по той же причине вы должны использовать любую из Clojure неизменяемых коллекций.

Ответ 2

Согласно DEFTYPE VS DEFRECORD, вы должны различать программные конструкции и доменные конструкции.

deftype предназначен для программирования конструкций, а defrecord - для доменных конструкций, которым требуется пользовательский тип.

Надеюсь это поможет.