LINUX.ORG.RU

Clojure, подскажите - зачем применяются defrecord, deftype?

 ,


0

3

Коллеги, помогите разобраться. Когда применяются на практике defrecord и deftype? Интересны реальные кейсы



Последнее исправление: small-entropy (всего исправлений: 1)

Тебе в целом про концепцию интерфейсов и имплементаций хочется услышать, или почему оно есть кложе?

oxo
()

Затем, зачем в C применяется structure, я полагаю

anonymous
()
Ответ на: комментарий от oxo

Какие прикладные задачи в Clojure решаются с помощью них. Ну и аналогичный вопрос на самом деле на счёт vars, atoms, agents, refs. Особенности осознал, пока не понял когда на каких практических задачах применять.

Буду благодарен если объясните или пошлёте по правильной ссылке, т.к. всё что находил - скорее абстрактная демонстрация на синтетических примерах.

small-entropy
() автор топика

Когда применяются на практике 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 ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от small-entropy

Всмысле, тебе непонятно когда мутабельное состояние использовать? А до Clojure ты только на хаскеле и эрланге чтоли писал?

lovesan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.