This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-11-08
Channels
- # bangalore-clj (4)
- # beginners (88)
- # boot (12)
- # cljs-dev (10)
- # cljsjs (1)
- # clojure (284)
- # clojure-denmark (2)
- # clojure-dev (35)
- # clojure-italy (8)
- # clojure-russia (36)
- # clojure-spec (38)
- # clojure-uk (51)
- # clojurescript (145)
- # cursive (6)
- # data-science (1)
- # datomic (8)
- # duct (43)
- # emacs (9)
- # figwheel (2)
- # fulcro (29)
- # graphql (1)
- # immutant (3)
- # instaparse (1)
- # jobs (1)
- # jobs-discuss (1)
- # lumo (16)
- # off-topic (50)
- # onyx (90)
- # re-frame (6)
- # reagent (20)
- # remote-jobs (3)
- # ring-swagger (18)
- # schema (8)
- # shadow-cljs (141)
- # slack-help (3)
- # spacemacs (36)
- # unrepl (7)
- # vim (1)
- # yada (2)
чтобы открытая система получилась - мультиметод в мультиметоде;
чтобы закрытая, можно в диспатч функции сделать сет "спец" версий, и возвращать [:osx]
если версия "не специальная", или [:osx :1.2.3]
если специальная. но тогда каждую новую версию надо в 2 местах добавлять будет. лучше уж тогда сразу cond
огромный наверное
мультиметод в мультиметоде должен быть проще всего: диспатчишь по [:os :ver]
, а в дефолтном обработчике диспатчишь на [:os]
, имплементишь [:os]
обработчики 1 раз, и не трогаешь их потом, со временем дописывая только обработчики для [:os :ver]
спасибо, подумаю. в английском канале отписал такое решение: каждый раз когда получаешь мап, делать derive по версии
тогда будет так
[:mac ::ANY] ==> any mac method
[:mac :11.22.33] ==> version specific mac method
тогда они будут валиться на ANY, но как только задекларить метод в версией, попадешь в него.
я бы не хотел позже пытаться всунуть версию типа 1.0.12 в иерархию под андроид, и обнаружить, что она уже под линухом есть например
я уточню, что у меня около 50 обработчиков, каждый второй различает что это за ОС. перелопачивать все не вариант.