Size: a a a

Clojure — русскоговорящее сообщество

2021 July 19

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Расскажите в двух словах для тех кто до emacs’а еще не просветлел в чем киллерфичи magit’а
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Юзабилити на кончиках пальцев и волшебное автодополнение для всего
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
100%
источник

PM

Pavel Meledin in Clojure — русскоговорящее сообщество
Вопрос про atom/agent/<что-то другое>.

Disclaimer: С кложей играюсь недавно

Задача: Нужна in-memory DB и по идее просто hash-map обернутый в atom подходит, с переодичным дампом данных в файл (в edn или json).

Проблема:
Ожидал что смогу с самого верхнего уровня передать в функцию запуска веб сервера (в примере http-server) atom (параметр db функции - http-server)
но получается так что после передачи, в функцию передается уже внутренняя структура которую содержит atom
Нагугленные решения выглядят как объявление функции (def in-memory-db (atom {})) и далее обращение к этому атому через fully.qualified.namespace.in-memory-db формат
что выглядит костыльным как минимум для того чтоб при тестировании можно было иметь несколько изолированных тестов запускаемых параллельно каждый из которых может писать
в свою изолированную копию atom. Судя по поведению agent'ы в плане передачи как параметра в функцию ведет себя так же как и atom

Вопросы:
1. В чем мое заблуждени(е/я) ? 😄
2. Как решаются подобные in-memory-db решения на базе атомов/агентов

Код:

(defn http-server [db]
 (println "inside HTTP server scope =" (type db)))

(deftest demo-test
 (testing "how to pass atom"
   (let [db (atom {})]
     (println "inside application bootstrap scope =" (type db))
     (http-server [db]))
   ))

Output:

inside application bootstrap scope = clojure.lang.Atom
inside HTTP server scope = clojure.lang.PersistentVector

Заранее благодарен за разбор кейса 🙏
источник

V0

Vlad 0xd728c4a7cd55d... in Clojure — русскоговорящее сообщество
(http-server db)
источник

E

ETL in Clojure — русскоговорящее сообщество
(reduce (fn [acc v] (merge acc v)) {} [{:k 5} {:j 9}]) 😭😭😭
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
☝️☝️
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Другими словами: убери кв. скобки в выражении (http-server [db])
источник

PM

Pavel Meledin in Clojure — русскоговорящее сообщество
фак, все было просто. спасибо
источник

PM

Pavel Meledin in Clojure — русскоговорящее сообщество
ага, понял. получается что я передавал вектор с одним элементом в котором был atom
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Тот случай, когда вопрос сформулирован так обстоятельно, что ответ был выдан сразу!
источник

E

ETL in Clojure — русскоговорящее сообщество
Я тут как-то в таком же стиле писал и сам ответил 😭😭😭
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Да. Правильно нарисованный рисунок - половина решения задачи.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Зачем?
источник

E

ETL in Clojure — русскоговорящее сообщество
Все остальные версии озвучены) я вообще за apply топлю всячески
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
1. Зачем некрофилить?
2. Зачем fn [acc v]?
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
(reduce merge [{:a 1} {:b 2} {:c 3}])
источник

E

ETL in Clojure — русскоговорящее сообщество
Стиль.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
А почему за apply топишь?
источник

E

ETL in Clojure — русскоговорящее сообщество
no-brain - видишь коллекцию, пишу apply
источник