This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-06-06
Channels
- # admin-announcements (1)
- # alda (2)
- # beginners (5)
- # boot (59)
- # clara (6)
- # cljs-dev (40)
- # cljsrn (32)
- # clojure (28)
- # clojure-austin (1)
- # clojure-belgium (67)
- # clojure-greece (60)
- # clojure-ireland (1)
- # clojure-japan (1)
- # clojure-russia (55)
- # clojure-spain (14)
- # clojure-spec (39)
- # clojure-uk (26)
- # clojurescript (152)
- # clojurewerkz (1)
- # cursive (21)
- # datomic (3)
- # dirac (15)
- # emacs (7)
- # events (2)
- # funcool (4)
- # hoplon (43)
- # immutant (1)
- # lambdaisland (1)
- # lein-figwheel (6)
- # leiningen (1)
- # off-topic (1)
- # om (23)
- # onyx (67)
- # other-languages (6)
- # pedestal (7)
- # planck (13)
- # proton (3)
- # protorepl (2)
- # re-frame (6)
- # reagent (5)
- # ring-swagger (6)
- # spacemacs (1)
- # specter (2)
- # yada (27)
Всем привет!
Кто-нибудь может объяснить почему в clojurescript наблюдается вот такое поведение?
(def b (atom {:a 1 😛 2})) (swap! b inc) => "{:a 1, 😛 2}1"
где exception?
похоже что твой атом к строке привелся
в кложуре ок ClassCastException clojure.lang.PersistentArrayMap cannot be cast to java.lang.Number clojure.lang.Numbers.inc (Numbers.java:112)
странно ага
(inc {:a 1})
WARNING: cljs.core/+, all arguments must be numbers, got [cljs.core/IMap number] instead. at line 1 <cljs repl>
"{:a 1}1"
(core/defmacro ^::ana/numeric +
([] 0)
([x] x)
([x y] (core/list 'js* "(~{} + ~{})" x y))
([x y & more] `(+ (+ ~x ~y) ~@more)))
> @maxp [6:52 PM] > подскажите, уважаемые, правильный красивый спобоб инвертировать мапы я решал через редьюс редьюс, @prepor предложил вариант поэлегантнее (defn iiiii! [m] (into {} (mapcat (fn [[k v]] (map vector v (repeat k))) m)))
кстати, если кого интересует телеграм-бот на кложе, то можете меня спрашивать, там есть разные не сразу понятные моменты.
@niwinz: спасибо!
@artemyarulin: так я и ждал такого же поведения как в clojure. обидно было что у меня демка была и я показывал коллегам как все неплохо с figwheel и defcard. а вот такое поведение clojurescript немного демку омрачило.
@mike1452: ух, несвезло да. Ну что тут скажешь - жс же, там грусть-печаль с этим. Я счас PureScript начал копать, там конечно этого бы не произошло - компилятор бы не дал. Но! Если представить что все будет покрыто clojure.spec - то и эти проблеме уйдут в никуда. У меня (да и у многих как я понимаю) большие надежды на это
жду clojure.spec тоже. особенно юзкейсов
@artemyarulin: кстати, а у тебя уже есть идеи, исходя из текущего гайда по спеке, как это в коде надо представлять? допустим я пишу на реагенте. некий стейт в виде мапы представлен в реагенте как r/atom. и вот кто-то пытается в эту мапу послать (swap! my-state inc). где в этом случае должна быть спека? в виде прослойки между мапой и остальным миром?
@mike1452: Сам жду чтоб кто-нить написал и показал как оно в реальности (у самого времени все нет). Я тут кидал статейку Нолена http://swannodette.github.io/2016/06/03/tools-for-thought и вот еще понравился гист для ом-некста: https://gist.github.com/swannodette/c1444684bc2a8236634e4e110c654fe5
как это запускать все, или как сделать чтоб юзеры моей либы это запускали я вот все еще хз
@artemyarulin: отдельно репозитарий со спеками к приложению деплоить на clojars? но это плюс одна зависимость
@a.espolov: Да вот хз я ей богу, там много наверняка нюансов. Я мечтаю чтоб Ричи провел какой воркшоп на тему как/почем/куда, да вот пока не видел полных примеров. Можно поспрашивать в #C1B1BB2Q3 наверно
ага я только что вопрос задал туда
я тоже прочитал гайд, туториалы, заметки в блогах - вроде все в общем понимаю, но блин голова не соображает пока как это притулить.
получил ответ из канала clojure-spec
делюсь
дак оно в рантайме получается, хм. А перформанс не страдает? Или можно отрубить когда в прод выпускаешь?
так весь спек про рантайм
это ж не core.typed
дада, просто я думал он как-бэ, эм, сбоку чтоль. А тут вот в этом примере они оборачивают inc, т.е. inc будет работать медленнее жеш.
насколько я понял, такой подход рекомендовано использовать в тестах/репле, но не в живом коде
аааа, тогда как надо в либах юзать?
ну так это пример
оборачивать inc смысла мало
видимо только достаточно крупные куски
We don’t (and couldn’t) live in a world where we can’t make mistakes. Instead, we periodically check that we haven’t. Amazon doesn’t send you your TV via a UPS<Trucks<Boxes<TV>>>. So occasionally you might get a microwave, but the supply chain isn’t burdened with correctness proof. Instead we check at the edges and run tests.
вот это ключевой посыл: Instead we check at the edges and run tests.
хм, ну почему-же нет смысла - я надеялся(=надеюсь) что спека пофиксит другую проблему кложуры заодно: Сообщения об ошибках. Как былоб круто заместо 100 строк что-что-то-не-импелеменит-IFn получить нормальное сообщение что (a b)
содержит ошибку ибо тип b не соответсвует нужному.
ну ничего не мешает иметь два набора спек
обязательный для production кода
и тот который только в тестах/во время девелопмента используется
прекондишены сложнее включать/отключать
вернее они сильнее код “зашумляют"
хотелось бы иметь это в core (интересно почему нету кста)
надо выбирать, заранее бояться instrument-а пожалуй что не стоит, обычно проблемы с performance-ом вылазят в других местах
ну вот о том и говорю - понятно, что ничего не понятно 🙂
@artemyarulin: ничего что медленее будет работать. пользователи подождут. а будут сопротивляться отключим газ
ну мож действительно можно отрубить для прода. Надо зайти в канал спеки и попросить Ричи митап устроить 🙂