Size: a a a

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

2021 June 27

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Использовать одинаковые имена для промежуточных локальных переменных, как в исходном примере?
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Зависит от локальных предпочтений, но я бы во втором биндинге просто убрал threading macro.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
хорошая практика — выделить функцию
(defn transform-collection
 [xs]
 (->> xs (map fn-1) (apply merge)))

(-> start-value
   transform-collection
   (with-meta {:some-meta true}))
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Ощущается правильным
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Или так, только тогда придётся имя придумать )
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
если это осмысленное действие, чего б не назвать 😊
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Хотел еще спросить у уважаемого сообщества для мерджа подобного рода нормальный ли код или есть возможность написать более clojure-way?
Здесь к нескольким исходным сущностям применяется одинаковой преобразование. В оригинале это entity из БД datomic, но для упрощения примера переписал таким образом.

Код
(->> [{:a {:b 1 :c “a”}} {:a {:b 2}}]
       (map #(-> % :a))
       (apply merge))
Результат
=> {:b 2 :c “a”}
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Это собственно и есть трансформация из прошлого вопроса 😃
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
или так
(defn transform-collection
 [xs f]
 (->> xs (map f) (apply merge)))

(-> start-value
   (transform-collection fn-1)
   (with-meta {:some-meta true}))
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Круто, спасибо 🤝
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
(map #(-> % :a)) если там правда так, то (map :a)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
  (->> [{:a {:b 1 :c "a"}} {:a {:b 2}}]
      (into {} (mapcat :a)))
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
А дальше уже можно задумываться о трансдусерах, если такие преобразования часто происходят.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
что apply, что merge — звучит не очень в данном случае
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Спасибо, не думал, что настолько можно улучшить )
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
это не улучшение, а формулировка алгоритма:
- собрать мапу из множества пар: into {}
- собрать слепить из нескольких коллекций одну: cat/mapcat
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а первоначальный вариант — комбинация функций коре для получения желаемого результата 😊
источник

LE

Leonid Eliseev in Clojure — русскоговорящее сообщество
Я это и имел ввиду, что здорово выразить алгоритм самыми подходящими средствами языка, а не просто запилить решение))
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Лёня, ты чо!?
источник