Size: a a a

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

2020 August 06

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Григорий
Добрый день. В продолжение к моим вчерашним вопросам: я все равно не понимаю как грамотно реализовать юзкейс экспортируемых сущностей.

Пишу протокол:
(defprotocol Exportable
 (export [this to & params]))

И потом хочу использовать что-то вроде:
(defrecord ParentalReport [child tested-parents maybe-parent locus-similarities meta]
 Exportable
 (export [this :excel params]
        (print "exporting to excel...")))


Так, конечно, не получается. Подскажите какие абстракции тут выгодно использовать. Уверен, что такой юзейкс почти у каждого в проекте встречался.
Можно протокол с мультиметодом
https://gist.github.com/KGOH/6380fd7190a3980bb338660684da35ea
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Но это всё ещё выглядит не элегантно, как мне кажется
источник

E

ETL in Clojure — русскоговорящее сообщество
https://github.com/plumatic/schema - в проекте, в котором пилил аналогичную фичу было сделано через defschema
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
Григорий
Можно "псевдо" код показать?
(defprotocol XlsConvertable
 (->xls [this]))

(defprotocol PdfConvertable
 (->pdf [this]))

(defprotocol CsvConvertable
 (->csv [this]))

(defrecord ParentalReport [child tested-parents maybe-parent locus-similarities meta]
 XlsConvertable
 (->xls [this]
   (...))
 PdfConvertable
 (->pdf [this]
   (...))
 CsvConvertable
 (->csv [this]
   (...)))

;; Usage
(let [parental-report (->ParentalReport ...)
     xls (->xls parental-report)
     pdf (->pdf parental-report)
     csv (->csv parental-report)]
 [xls pdf csv])
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
что-то такого рода
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Угу, спасибо. Подумаю еще.
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
Григорий
Угу, спасибо. Подумаю еще.
А ещё меня немного настораживают некоторые поля в вашем рекорде, вроде мэйби-парент... но тут сложно сказать не видя кода
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Это значит что там nil может быть.
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
Это я понял... но это ж кложа, нул может быть где угодно, но префикс мэйби не добавляется... но не буду лезть, я не знаю что именно пытались вы добиться
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Да я знаю. Как можно легко догадаться я из Haskell'я пришел. И лично мне так легче думать.
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
Можно сначала объявить все реквайред поля, потом все опциональные и сделать функцию конструктор которая принимает опциональные поля через кейворды
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Не, тут nil тоже важен. Он означает, что я тестировал существ на родство: ребенок и предполагаемые родители. Если не nil - то среди них есть его подлинный родитель, иначе — нет.
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
(make-parental-report
[required-1 required-2 & {:keys [optional-1 optional-2]}]
(map->ParentalReport ...))

;; Usage

(make-parental-report req-1 req-2 :optional-1 opt)
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
то есть требуется явно посылать нил?
источник

Г

Григорий in Clojure — русскоговорящее сообщество
Да.
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
не очень люблю такое... но если надо так надо
источник

DK

Denis Krivosheev in Clojure — русскоговорящее сообщество
обычно если это надо как-то явно обозначить заменяю на что-то, какой-то кейворд
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
коллеги, а кто-то разобрался с github actions?
у меня что-то падает, а на каком месте – не понимаю, аннтации пустые.
А как туда писать неясно, мануалы страшные у actions
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Иван Федоров
коллеги, а кто-то разобрался с github actions?
у меня что-то падает, а на каком месте – не понимаю, аннтации пустые.
А как туда писать неясно, мануалы страшные у actions
У тебя же лог экшона есть. Смотри туда.
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
Kirill Chernyshov
У тебя же лог экшона есть. Смотри туда.
я смотрю, но не могу узреть. может там какая-то настройка?
источник