This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-08-31
Channels
- # architecture (1)
- # aws (23)
- # beginners (13)
- # boot (18)
- # cider (5)
- # clara (1)
- # cljs-dev (22)
- # cljsjs (9)
- # cljsrn (28)
- # clojure (120)
- # clojure-canada (12)
- # clojure-dev (6)
- # clojure-italy (4)
- # clojure-korea (1)
- # clojure-russia (18)
- # clojure-sg (8)
- # clojure-spec (45)
- # clojure-uk (12)
- # clojurescript (240)
- # component (4)
- # cursive (17)
- # datomic (91)
- # editors-rus (4)
- # figwheel (2)
- # flambo (6)
- # hoplon (163)
- # instaparse (6)
- # jobs (1)
- # leiningen (2)
- # luminus (5)
- # om (22)
- # om-next (2)
- # onyx (35)
- # perun (15)
- # play-clj (1)
- # protorepl (4)
- # re-frame (106)
- # reagent (4)
- # ring (106)
- # schema (1)
- # spacemacs (17)
- # untangled (40)
- # yada (14)
Всем привет. Вопрос - есть файл в котором сохранено состояние программы - примерно такого вида {1,2,{2,"sdf",3,{1},2}..{1,2},,,{2}} - т.е. записано все в список. Какой библиотекой проще парсинг сделать? И второй вопрос - к этому списку надо как-то добавить имена и типы хранящихся там данных. Как проще такое соответствие организовать?
——————————————————————— Такой вопрос. Сразу извиняюсь за кучу текста:) Вот есть такой классический способ в клоуже:
(-> [[1 2] [:a :b]] (get 1) first) ; => :a
сдесь (get 1)
вместо second
просто ради примера использования функции с более чем одним параметром)
А мне нужен какой то такой вдобавок:
((fn-> (get 1) first) [[1 2] [:a :b]])
(что бы такую новосозданную функцию можно было куда то передать, и позже вызвать с нужным аргументом)
реализация проста (может я правда что то не учел...):
(defmacro fn-> [& forms]
`(fn [x#]
(-> x# [email protected])))
Вопрос - есть идеи лучшего/более-очевидного имени?
Оригинально я создал такую штуку c другим более очевидным именем:
(defmacro comp-> [& fns]
`(comp ~@(reverse fns)))
ну или так (если без макросов):
(defn comp-> [& fns]
(apply comp (reverse fns)))
она удобна в тех случаях когда все функции, которые нужно скомпоновать в "натуральном порядке а не навыворот", - принимают только один параметр
также такая реализация будет более удобной в случае использования анонимных функций:
((comp-> #(get % 1) first) [[1 2] [:a :b]]) ; => :a
против более “скобастого":
((fn-> (#(get % 1)) first) [[1 2] [:a :b]]) ; => :a
Это я веду к тому что наверное удобно иметь оба варианта...
Как тогда оба эти назвать?
Раньше я думал что comp-> это очевидно для простого "reversed comp", потому что стрелочка указывает на то что это тот же комп, но "составленный" последовательно с функций, поэтому и порядок изменится...
Теперь я понимаю, что у "очевидности" могут ноги расти и из того, что стрелочка - это таки всем уже известный макрос, и приставка comp - просто говорит о том что мы компонуем функцию из того что и раньше можно было в стрелочку-макрос запихнуть...
Но при той реализации для comp-> что я показал выше - это не верно... значит таки лучше реализовать comp-> как:
(defmacro comp-> [& forms]
`(fn [x#]
(-> x# [email protected])))
но тогда какое имя придумать для обычного "reversed comp"? - может просто rcomp
какой то? другие идеи? 🙂 может есть другие "символы" которые могут быть очевидны как "инверсия"…
ну или может таки забить нафиг на
удобность
(defn comp-> [& fns]
(apply comp (reverse fns)))
((comp-> #(get % 1) first) [[1 2] [:a :b]]) ; => :a
и оставить реализацию более скобастую и с ней уже и мириться:
(defmacro comp-> [& forms]
`(fn [x#]
(-> x# [email protected])))
((comp-> (#(get % 1)) first) [[1 2] [:a :b]]) ; => :a
?
типа как оставить одну реализацию пускай иногда менее удобную - это более KISS...вот здесь https://gist.github.com/yashaka/09264bfd8b933e6699cb7ea9c5d75957 в конец добавил юз кейс использования что-бы было понятно зачем мне такое заддротство 🙂
Привет, посоветуйте, пожалуйста, литературу для начинающих. Беглый поиск по слаку выдал: https://clojurians.slack.com/archives/clojure/p1472324784007268 и https://clojurians.slack.com/archives/clojure-brasil/p1472296674000070 сам планировал такое: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-1119267277.html
@yashaka a wrap-routes
не подойдет тебе?
https://crossclj.info/ns/compojure/1.6.0-beta1/compojure.core.html#_wrap-routes
http://www.luminusweb.net/docs/routes.md#organizing_application_routes
@mkaschenko thanks.
@mkaschenko как то пока не сильно понимаю как оно мне поможет… по крайней мере по доке к функции ("Apply a middleware function to routes after they have been matched.”) может еще нагуглю какие то примеры использования… и поразбираюсь в коде…. Но пока что мне кажется что эта штука в контексте “порядка” точно такая же как и обычное навешивание мидлвар… просто она позволяет навесить конкретно на один нужный хендлер… но порядок то все равно будет “навыворот”…
ну… comp и -> это базовые вещи. wrap-routes - это уже штука чисто заточенная под конкретную доменную область… А мой comp-> это тоже из разряда “базовых” вещей… в принципе без которой можно обойтись через использования просто ->
(POST "/login" req (-> req params-request
keyword-params-request
handlers/do-login)))
а comp-> это просто такая удобная штука для создания функции для такого же контекста, которая мне кажется имеет право на сущестовование как и макрос -> без которого тоже ведь можно обойтись…
хотя конечно можно и без нее 🙂
но привыкать к чему то, что запутанное, с кучей скрытой неочевидной магией внутри - это мне точно выглядит странным 🙂кстати, на тему книг.. O'Reilly решила в честь 1 сентября сделать скидку 50% на все электронные книги: http://shop.oreilly.com/category/deals/b2s-special.do
там есть и по Clojure: https://ssearch.oreilly.com/?i=1;m_Sort=searchDate;q=clojure&act=sort 🙂