【问题标题】:Scala - Cannot resolve symbol flatMapScala - 无法解析符号 flatMap
【发布时间】:2021-10-19 04:50:31
【问题描述】:
def pinShare(id: String, teamOpt: Option[String], expireTime: Long, interestOpt: Option[List[Interest]]): Future[Unit] = {
    for {
      teamObj     <- teamOpt.map(team => teamRepository.getTeam(team)).getOrElse(Future.successful(None))
      interestObj <- interestOpt.getOrElse(TR) // **says cannot resolve symbol flatmap here.**
      share       <- shareRepository.findOneById(id).getOrFailWith(ShareNotFoundException)
      _           <- shareRepository.pinShare(share.id, teamObj, expireTime, interestObj)
    } yield {
      Future(postUpdateActions(id, None))

      ()
    }

在interestObj 行上显示“无法解析符号flatMap”。我该如何解决这个问题?

【问题讨论】:

  • TR 是如何定义的?
  • 这是一个值(字符串)。值(“tr”)
  • 如果你能在你的代码中提供所有函数的最小版本会有所帮助,只有类型签名就足够了,它们的实现总是可以???

标签: scala flatmap


【解决方案1】:

你的问题是 interestOpt.getOrElse(TR) 没有 List 类型。

声明TR 具有List[Interest] 类型。

【讨论】:

  • 这仍然行不通,因为由于在单个 for 中混合了多个 monad,代码还有许多其他错误
  • 我无法解决我看不到的问题:(
  • 是的,完全同意,这就是为什么我要求 OP 澄清,因为我也不明白预期的行为是什么。尤其是yield 中的Future 真的让我很困惑。
【解决方案2】:

改变这行表格

interestObj <- interestOpt.getOrElse(TR)

interestObj = interestOpt.getOrElse(TR)

【讨论】:

  • 这将严重改变语义。我也怀疑它会编译。
猜你喜欢
  • 2021-03-28
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2023-02-26
相关资源
最近更新 更多