Size: a a a

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

2020 November 09

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Иерархию мультиметодов?
Нет, для диспетчеризации.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
(derive ...) etc.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
Нет, для диспетчеризации.
Это то, что на кивордах?
источник

OR

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

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну да, через наследование кивордов
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Не только кивордов
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Минус в том, что это работает гораздо медленнее, чем обычный полиморфизм, но зато очень выразительно)
гораздо медленнее — это порядка 30ns 😊
https://github.com/serioga/clojure-benhcmarks/blob/master/src/clojure_benchmarks/multimethods.clj
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
А где вариант с протоколами?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А где вариант с протоколами?
не рассматривался
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
а почему? неужели удобнее с мапками по :type диспатчить, чем отдать это на откуп jvm?
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
никогда не понимал этого в  комъюнити: любовь к мапкам вместо полноценных рекордов
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
Mike Bohdan
а почему? неужели удобнее с мапками по :type диспатчить, чем отдать это на откуп jvm?
у мультиметодов спектр применений шире, вспомнить опять же derive
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Alex Bubnov
у мультиметодов спектр применений шире, вспомнить опять же derive
никто же не спорит, просто видел много раз мультиметоды в стиле (defmulti foo (fn [x] (type x))
источник

MB

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

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
в том же sicp первое что рассказывают: делайте рекорды и функции для них чтоб не парится что там внутри пара, лист или еще что (в данном случае мапка)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
не рассматривался
Ну собственно с протоколами и предполагалось сравнить)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну собственно с протоколами и предполагалось сравнить)
будет порядка 10ns
источник

VP

Vladimir Pavlyuk in Clojure — русскоговорящее сообщество
Ребят, всем добрый вечер
Кто нибудь знает хорошую практику, как красиво прокидывать key prop в компоненты?
прокидывать прямо ключом :key в пропсы не всегда годится, особенно для самописных компонентов
а иначе только через meta, типа такого

(defn main-component []
 (let [some-state (r/atom {})]
   (doall
     (for [item ["a" "b" "c"]]
       ^{:key item}
       [sub-component @some-state item]))))

Насколько помню, здесь ему нужен doall, иначе он будет ругаться на дереф some-state
может кто знает, есть ли способ поступить красивее в подобных случаях?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
будет порядка 10ns
хотя может и вру, мне не ясен код, который понимается в контексте с протоколами
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну собственно с протоколами и предполагалось сравнить)
меня на тот момент вопрос интересовал в контексте ring handler, которые работают с мапой реквеста
поэтому вопрос с протоколами там рядом не стоял
источник