Как избежать использования 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и т. д.)

Большая помощь приветствуется.

0 ответов

Другие вопросы по тегам