This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-09-24
Channels
- # beginners (15)
- # boot (4)
- # cider (1)
- # cljs-dev (2)
- # cljsrn (5)
- # clojure (124)
- # clojure-france (2)
- # clojure-russia (22)
- # clojure-uk (10)
- # clojurescript (50)
- # core-async (5)
- # cursive (3)
- # datomic (8)
- # emacs (2)
- # fulcro (10)
- # hoplon (8)
- # jobs (4)
- # luminus (2)
- # lumo (7)
- # off-topic (14)
- # portkey (7)
- # re-frame (22)
- # reagent (2)
- # shadow-cljs (3)
- # spacemacs (1)
- # yada (26)
@rustam.gilaztdinov в кор-асинк добавляли https://clojuredocs.org/clojure.core.async/pipeline. На трансдюсерах
Насколько я помню, pmap внутри как раз на фьючерах и работает
Подскажите, насколько такая штука законна? У меня как-то нестабильно работает, есть подозрения на то, что это хак.
(declare b)
(def a {:name "A", :ref b})
(def b {:name "B", :ref a})
(defn show [x]
(str "name " (:name x) ", ref " (:name (:ref x))))
(println (show a))
(println (show b))
компилятор кложы - проходит в один проход, поэтому как раз таки законно. И именно для таких штук и существует declare
Про декларе пишут что не работает на типах-мапах, только на функциях. Но я нашел выход - если еще не задана переменная, я просто пишу в поле ее строковое имя 🙂 А Кложа позволяет вычислять значение по символу 🙂 Вот такой дополнительный уровень косвенности ради иммутабельных циклических структур - но зато не связался с мутабельностью :golfer:
Будешь смеяться - но оно таки работало по ссылке друг на друга 🙂 Но один уровень вложенности, если гонять 2 и более - ошибки
навскидку не получается написать простой ломающийся пример, но в рабочем коде оно ломалось
@ivana Я подозреваю, что дело в том, что определения a
и b
вычисляются в момент их объявления.
Можно использовать {:name "B" :ref #'a}
, и делать @
тогда, когда используется. Тогда там будет последнее значение соответствующего Var
.
Это та же идея, что со строковым именем, но только выраженная встроенными средствами кложуры.
Ну да, но на символ он мне тоже подсвечивал, что он неопределен, поэтому я решил тупо по строке 🙂
(declare b)
(def a {:name "A" :ref #'b})
(def b {:name "B" :ref #'a})
(defn show [x] (str "name " (:name x) ", ref " (:name @(:ref x))))
(show a)
(show b)
а, и с символом, и с его декларацией! я когда на символы хотел заменить, декларации убрал.