Scala - 无法解析符号 flatMap

Posted

技术标签:

【中文标题】Scala - 无法解析符号 flatMap【英文标题】:Scala - Cannot resolve symbol 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”) 如果你能在你的代码中提供所有函数的最小版本会有所帮助,只有类型签名就足够了,它们的实现总是可以??? 【参考方案1】:

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

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

【讨论】:

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

改变这行表格

interestObj <- interestOpt.getOrElse(TR)

interestObj = interestOpt.getOrElse(TR)

【讨论】:

这将严重改变语义。我也怀疑它会编译。

以上是关于Scala - 无法解析符号 flatMap的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ Idea 无法解析 Scala 管理源中的符号 (sbt-buildinfo)

DefaultParsers:无法解析符号导入 sbt.complete.DefaultParsers._

Intellij IDEA 设置:无法解析符号 println

如何使用`flatMap`和`map`填充Play框架+ Scala上的`list`?

Scala 无法解决符号退出

无法解析的外部符号 C++