Size: a a a

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

2019 June 28

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Ivan Grishaev
можно сделать мультами и кастомной иерархией
да, иерархия, это нужно
но у мультиметодов нет super
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
ну или явно ((get-method… ) …)
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
но зачем тогда иерархию прописывать
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
внутри мульта ты можешь вызвать его же, но с другим ключом
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
(derive :e/article :e/publication)

(defmethod validate :e/article [x]
  ((get-method validate :e/publication) x)
  …)
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
т.е. для каких-то мультиметодов будет иерархия
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
но в некоторых случаях мне эту иерархию нужно еще раз в реализации мультиметода прописать
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
хотя это отношение уже описано в иерархии
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
и да, тут еще разрешено множественно наследование… =)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
наверное, лучше поискать другой путь, мб. с композицией функций или что-то еще.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Были моменты, когда кажется, что кроме как на ООП с наследованием не сделаешь, но ничего, как-то получалось в итоге
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
хорошо, а если уйти от «ООП» с «классами»
к «ООП» с прототипами
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
как такие значения сериализовывать?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
(defprotocol Validatable
 :extend-via-metadata true
 (validate [val]))

(def blank-publication
 (with-meta {} {`validate (fn [x] x)}))

(def blank-article
 (vary-meta blank-publication update `validate
            (fn [old]
              (fn [x]
                (old x)))))
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
может не работает, просто псевдокод
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
т.е. тут аля прототипы в метаданных
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
как это сериализовать и восстановить с реализацией протокола?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
да, иерархия, это нужно
но у мультиметодов нет super
Замени наследование композицией
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Anton Chikin
Замени наследование композицией
А можешь пример привести?
источник

ИФ

Иван Федоров in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
А можешь пример привести?
как насчёт
(def article-validations [validate-word-count])
(def photo-validations (conj article-validations validate-total-weight validate-copyright))

(defn validate [article]
 (reduce (fn [[article validation-data] validator] (merge validation-data (validator article)))
                [article {}]
                photo-validations))
источник