def jobEventToJobEventTimeLine(jobEvent: JobEvent): JobEventTimeline = {
val OpFields(stepId, jobBaseStepId, fieldId) = extractFromOp(jobEvent.getOp)
JobEventTimeline(
jobEvent.getJobId,
if (jobEvent.isSetTyp) Some(jobEvent.getTyp.toString) else None,
if (jobEvent.isSetInPlanning) Some(jobEvent.inPlanning) else None,
jobEvent.getPedigree.getTeamId,
jobEvent.getPedigree.getActorId,
if (jobEvent.getPedigree.isSetAdminActorId) Some(jobEvent.getPedigree.getAdminActorId) else None,
jobEvent.getPedigree.getSessionId,
if (jobEvent.getPedigree.isSetClientSessionId) Some(jobEvent.getPedigree.getClientSessionId) else None,
jobEvent.getPedigree.getCreatedAt,
jobEvent.getPedigree.getSeqId,
if (jobEvent.getPedigree.isSetIsSideEffect) Some(jobEvent.getPedigree.isSideEffect) else None,
jobEvent.getOp.getSetField.toString,
stepId,
jobBaseStepId,
fieldId,
if (jobEvent.isSetReceivedAt) Some(jobEvent.getReceivedAt) else None
)
}
def ToJobEvent(binData: Array[Byte]): Option[JobEventTimeline] = FuncUtils.deserializeJobEvent(binData) flatMap Some(jobEventToJobEventTimeLine(_))
我正在尝试使用 flatMap 作为绑定运算符来将 monadic 值应用于 monad,但是我的 IDE 说 flatMap 无法解析。这样做的正确方法是什么?
Some(jobEventToJobEventTimeLine(_))
意味着Some(x => jobEventToJobEventTimeLine(x))
,不是x => Some(jobEventToJobEventTimeLine(x))
,所以类型不匹配。写
FuncUtils.deserializeJobEvent(binData).flatMap { x => Some(jobEventToJobEventTimeLine(x)) }
明确地。
也if (jobEvent.isSetTyp) Some(jobEvent.getTyp.toString) else None
可以写成Option.when(jobEvent.isSetTyp)(jobEvent.getTyp.toString)
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句