【问题标题】:Scala flatMap method on Option type cannot be resolved. What is the correct way to do this?无法解析 Option 类型的 Scala flatMap 方法。这样做的正确方法是什么?
【发布时间】:2019-12-11 11:58:12
【问题描述】:
  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 Value 应用于 monad,但是我的 IDE 说 flatMap 无法解析。这样做的正确方法是什么?

【问题讨论】:

    标签: scala bind monads flatmap


    【解决方案1】:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多