Size: a a a

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

2020 November 26

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
ETL
На тему осваивания - мне нужно сделать трансдьюсер, но я не до конца догоняю как он работает, судя по всему:

(def x (map inc))
(x [1 2 3])
=>
#object[clojure.core$map$fn__5847$fn__5848 0x28aeaf06 "clojure.core$map$fn__5847$fn__5848@28aeaf06"]

Что я делаю не так?

Я так понимаю, что если map (ну и другие функции, где об этом указано прямо) недополучает аргументов, то результатом этой операции является трансдьюсер. Умные пацаны пишут - "Note: this reduced arity is not currying or partial application". А что это тогда есть? И как мне правильно скормить трансдьюсеру вектор?
(eduction x [1 2 3])
Или
(into [] x [1 2 3])
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
источник

E

ETL in Clojure — русскоговорящее сообщество
Благодарю, буду курить )
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Трансдьюсер сам по себе не вызывается, его передают в into, sequence, etc
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
он как рабочий элемент: другой код им оперирует
источник

E

ETL in Clojure — русскоговорящее сообщество
А можно привести пример правильного рабочего использования трансдьюсеров?
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
comp возвращает трансдьюсер?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
например

(def xf (comp (remove string?) (map inc)))

(sequence xf ["foo" 42 "bar"])
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(43)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Kostyantin Randomname
comp возвращает трансдьюсер?
не совсем, comp схлопывает функции в одну, а т.к. трансдьюсер это функция, их можно схлопнуть в один через комп
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ETL
А можно привести пример правильного рабочего использования трансдьюсеров?
ну, самый ходовой вариант — в into, чтобы собрать коллекцию нужного типа со всеми преобразованиями

ещё они полезны в core.async
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ETL
А можно привести пример правильного рабочего использования трансдьюсеров?
здесь примеров недостаточно?
https://clojuredocs.org/clojure.core/transduce
источник

E

ETL in Clojure — русскоговорящее сообщество
Sergey Trofimov
здесь примеров недостаточно?
https://clojuredocs.org/clojure.core/transduce
Они слишком безжизненны ) пример Ивана мне открыл дзен трансдьюсеров )
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Вот реальный пример из проекта

(defn xf-usage-pre
 [inventory]
 (comp
  (map add-metadata)
  (remove (dedicated? cache))
  (remove instancepool?)
  (remove useless-event?)
  (remove noop?)
  (reductions-with apply-event inventory)))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
reductions-with это кастомный tx, который вернет цепочку reduce
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
т.е. стек может быть большой, и если список длинный, то плодить промежуточные реально расточительно
источник
2020 November 27

S

Shieldy in Clojure — русскоговорящее сообщество
(1 + 7) @bonch_b, please, send the solution to the arithmetic operation provided within the time amount specified to this group, otherwise you will be kicked. Thank you! (60 sec)
Powered by Todorant
источник

SM

Sergey Moroz in Clojure — русскоговорящее сообщество
Shieldy
(1 + 7) @bonch_b, please, send the solution to the arithmetic operation provided within the time amount specified to this group, otherwise you will be kicked. Thank you! (60 sec)
Powered by Todorant
ClassCastException
источник

NA

Nikolay Artamonov in Clojure — русскоговорящее сообщество
Ivan Grishaev
Для одного, конечно, не страшно. Как вариант, посмотреть
ScheduledThreadPoolExecutor -- это не требует сторонних библиотек. Другие варианты -- clojure.core.async и manifold
А вот такой либой не пользовались https://github.com/overtone/at-at ?
источник

VL

Vladimir Legkunets in Clojure — русскоговорящее сообщество
+ есть еще хороший wrapper для  quartz
Если много тасков которые по времени нужно скедулить  - почему бы нет
источник