Как избежать использования reinject в Clojure riemann?
У меня есть правило Clojure Римана следующим образом
(streams
(where (service "a")
#(info "a-" %)
(moving-event-window 2 (smap folds/sum (with :service "a-derivative" reinject))))
(where (service "b")
#(info "b-" %)
(moving-event-window 3 (smap folds/sum (with :service "b-derivative" reinject))))
(project [(service "a-derivative") (service "b-derivative")]
(smap folds/quotient (with :laa "doooo" prn))))
Цель состоит в том, чтобы создать сумму двух событий a и создать . Аналогично по сервисуb
создать b-производную. Затем я хочу найти частное производных событий «a-производная» и «b-производная».
В приведенном выше примереa-derivative
иb-derivative
события вводятся повторно, а затем я использую проект, чтобы получить производные события для расчета коэффициента.
Судя по документации Римана , нам следует избегать этого. Если это так, то как нам избежатьreinject
и переписать приведенное выше правило?
Хорошо, один из подходов, который я попробовал, заключается в следующем:
(streams
(pipe -
(splitp = service
"a" (moving-event-window 2 (smap folds/sum (with :service "a-derivative" -)))
"b" (moving-event-window 2 (smap folds/sum (with :service "b-derivative" -))))
(sdo #(info "hmm" %)
(project [(service "a-derivative") (service "b-derivative")]
(smap folds/quotient (with :laa "doooo" prn))))
)
)
И это работает!. Однако правильно ли это? Кроме того, этот подход был простым, поскольку обе функции были похожи. (IE, они оба полагались на , поэтому разделение работало.) Что, если функции были совершенно разными. (Например, одна функция полагалась наservice name
и еще одна функция, основанная наtags
и т. д.)
Большая помощь приветствуется.