这个过程感觉就像一个扫描,但我不确定它是......是吗?

时间:2015-02-19 17:15:55

标签: scalaz-stream

我创建了一个帮助我解析日志文件的进程。日志文件需要使用字符串标记进行标记。从来没有记录可以提供这个字符串标记,所以我需要在每个日志事件中保持一些状态,以便每个事件都有一个标记。如果某个事件缺少标记,我想使用找到的最后一个标记。这允许我解析下面的日志,并有一个"标签"与消息行相关联,即使它们是eventindex04记录头的一部分。我可以将事件包装在一个信封中并在信封中包含逻辑,但随后我在任何地方都有一个看似重量级的信封。

eventindex01 start log ...
eventindex02 time ...
eventindex03 user ...
eventindex04 message
  message1
  message2
eventindex05 start log ...

我把这个过程放在一起工作正常:

def extractStatefulAttribute[T, D](first: T)(getTag: D => Option[T]):
  Process1[D, (T, D)] = {
    def go(lastTag: T): Process1[D, (T, D)] = {
      Process.receive1[D, (T, D)] {
        event: D =>
          val tag = getTag(event) getOrElse lastTag
          Process.emit((tag, event)) ++ go(tag)
      }
    }
   go(first)
}

这感觉它应该表示为扫描/折叠,但我无法使其工作。这可以重写为扫描/折叠吗?

0 个答案:

没有答案