Size: a a a

Clojure — русскоговорящее сообщество

2020 August 05

Г

Григорий in Clojure — русскоговорящее сообщество
Добрый день, господа! Ковыряюсь с defmulti и defmethod. Юзкейс: хочу создать мультиметод export, на основе которого построить методы, которые в зависимости от переданного рекорда (скажем AnnualReport или PersonReport) и keyword'а (например :excel, :csv, :pdf), будут экспортировать данные куда-то. Как это должно выглядеть не понимаю...
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Можете подсказать по форме?
источник

VK

Vadim Komarov in Clojure — русскоговорящее сообщество
Мне с этим вопросом помог разобраться раздел Polymorphism из этой статьи: https://yogthos.net/ClojureDistilled.html
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Григорий
Можете подсказать по форме?
(defmulti export type)

(defmethod export your-record-ns.AnnualReport [record] ...)

(defmethod export your-record-ns.PersonReport [record] ...)
источник

Г

Григорий in Clojure — русскоговорящее сообщество
(defmult export type)


А как же "куда"? :excel, :pdf  …?
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
проще интерфейс обьявить
Exportable например, с методом (export [this to] …)
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Да, я тоже об этом думал.
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Григорий
(defmult export type)


А как же "куда"? :excel, :pdf  …?
(defmulti export (fn [to data] [to (type data)]))


(defmethod export [:pdf your-record-ns.AnnualReport] [_ record] ...)

(defmethod export [:excel your-record-ns.AnnualReport] [_ record] ...)

(defmethod export [:pdf your-record-ns.PersonReport] [_ record] ...)

(defmethod export [:excel your-record-ns.PersonReport] [_ record] ...)
источник

Г

Григорий in Clojure — русскоговорящее сообщество
То есть это не очень правильный юзкейс для мультиметода, да? Лучше интерфейс использовать?
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Григорий
То есть это не очень правильный юзкейс для мультиметода, да? Лучше интерфейс использовать?
Я бы интерфейс использовал. Но мультиметод тоже можно применить
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
да можно и мултиметод, главное разделить что экспортировать от того куда экспортировать
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Народ, кто что может сказать про легковесные текстовые(html/теги итп нафиг не надо) темплейтеры? Хочется просто иметь возможность свернуть темплейт с хэшмапой со значениями
SO советует всякое: https://stackoverflow.com/questions/28559824/lightweight-clojure-library-for-simple-string-templating
Clostache - давно не обновлялся
Comb - относительно вербозный
Selmer - очень уж фичастый и изобретает полноценный DSL, который не нужен
core.incubator/<< - нужно придётся теструктурить/биндить значения из хэшмапы

P.S. изобретать закат солнца вручную тоже не хочется, как минимум потому что придётся тестами покрывать
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
Народ, кто что может сказать про легковесные текстовые(html/теги итп нафиг не надо) темплейтеры? Хочется просто иметь возможность свернуть темплейт с хэшмапой со значениями
SO советует всякое: https://stackoverflow.com/questions/28559824/lightweight-clojure-library-for-simple-string-templating
Clostache - давно не обновлялся
Comb - относительно вербозный
Selmer - очень уж фичастый и изобретает полноценный DSL, который не нужен
core.incubator/<< - нужно придётся теструктурить/биндить значения из хэшмапы

P.S. изобретать закат солнца вручную тоже не хочется, как минимум потому что придётся тестами покрывать
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
руби не нужен, нужно сделать свертку с хэшмапой
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ввыше написал, почему не
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
упс, проглядел
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Так-то я из вышеперечисленного больше всего склоняюсь к selmer, он хоть и оверфичастый, но делает то, что нужно, и, вроде бы, поддерживается активнее всего
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
Народ, кто что может сказать про легковесные текстовые(html/теги итп нафиг не надо) темплейтеры? Хочется просто иметь возможность свернуть темплейт с хэшмапой со значениями
SO советует всякое: https://stackoverflow.com/questions/28559824/lightweight-clojure-library-for-simple-string-templating
Clostache - давно не обновлялся
Comb - относительно вербозный
Selmer - очень уж фичастый и изобретает полноценный DSL, который не нужен
core.incubator/<< - нужно придётся теструктурить/биндить значения из хэшмапы

P.S. изобретать закат солнца вручную тоже не хочется, как минимум потому что придётся тестами покрывать
я перебирал, остановился на mustache через stencil
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Sergey Trofimov
я перебирал, остановился на mustache через stencil
5 лет без обновлений не то, что сильно пугают, но как-то неуютно :)
источник