@rustam.gilaztdinov в кор-асинк добавляли https://clojuredocs.org/clojure.core.async/pipeline. На трансдюсерах
да можно и без асинка, сделать вектор футур, потом каждую deref
Насколько я помню, 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:
@ivana А как "нестабильно"?
Будешь смеяться - но оно таки работало по ссылке друг на друга 🙂 Но один уровень вложенности, если гонять 2 и более - ошибки
Можно пример, как не работает?
щас попробую
навскидку не получается написать простой ломающийся пример, но в рабочем коде оно ломалось
@ivana Я подозреваю, что дело в том, что определения a
и b
вычисляются в момент их объявления.
Можно использовать {:name "B" :ref #'a}
, и делать @
тогда, когда используется. Тогда там будет последнее значение соответствующего Var
.
Это та же идея, что со строковым именем, но только выраженная встроенными средствами кложуры.
Ну да, но на символ он мне тоже подсвечивал, что он неопределен, поэтому я решил тупо по строке 🙂
Правильно, потому что 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)
а, и с символом, и с его декларацией! я когда на символы хотел заменить, декларации убрал.
Господа, а куда бы можно подеплоить кложурный код, чтобы не заниматься ерундой с инфраструктурой? Чтобы одной командой jar залить, и он работал. Что-нибудь типа heroku.
Трафика у меня будет около нуля.
Google App Engine?
Нормально, App Engine.