История изменений
Исправление Nervous, (текущая версия) :
Когда применяются на практике defrecord и deftype
Когда нужен привычный полиморфизм (с диспетчеризацией по типу первого аргумента). Например, мы делаем робокота и хотим, чтобы он мяукал как настоящий — нужно создать тип, реализующий существующий протокол (интерфейс) Catlike с методом meow.
Допустим, есть
(defprotocol Catlike
(meow [_] "Make the dumb human dwim (do what I mean)."))
(defrecord Cat [name]
Catlike
(meow [this] (str name " says: Meow!")))
просто добавляем
(defrecord Robocat [name charge]
Catlike
(meow [this] (str name " says: please do the right thing right now, or be electrically cuted!"))
и потом
(def my-pet (atom (->Robocat "Jimi")))
(meow @my-pet)
Если такое мяуканье нам не по душе, мы можем выкинуть наглую механическую морду на мороз и завести себе шерстяную:
(reset! my-pet (->Cat "Lizzie"))
(meow @my-pet)
Если нужно какое-то общее поведение для всех мяукающих, можно вынести его в отдельный тип и организовать типы в иерархию.
аналогичный вопрос на самом деле на счёт vars, atoms, agents, refs
Это для явного управления различными видами состояния (последовательности значений во времени).
Исходная версия Nervous, :
Когда применяются на практике defrecord и deftype
Когда нужен привычный полиморфизм (с диспетчеризацией по типу первого аргумента). Например, мы делаем робокота и хотим, чтобы он мяукал как настоящий — нужно создать тип, реализующий существующий протокол (интерфейс) Catlike с методом meow.
Допустим, есть
(defprotocol Catlike
(meow [_] "Make the dumb human dwim (do what I mean)."))
(defrecord Cat [name]
Catlike
(meow [this] (str name " says: Meow!")))
просто добавляем
(defrecord Robocat [name charge]
Catlike
(meow [this] (str name " says: please do the right thing right now, or be electrically cuted!"))
и потом
(def my-pet (atom (->Robocat "Jimi")))
(meow @my-pet)
Если такое мяуканье нам не по душе, мы можем выкинуть наглую механическую морду на мороз и завести себе шерстяную:
(reset! my-pet (->Cat "Lizzie"))
(meow @my-pet)
Если нужно какое-то общее поведение для всех мяукающих, можно вынести его в отдельный тип и организовать типы в иерархию.
аналогичный вопрос на самом деле на счёт vars, atoms, agents, refs
Это для явного управления различными видами состояния (последовательности значений во времени).