You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala for推导式flatMap类型定义:如何指定<-的返回类型?

Scala For推导式中FlatMap的类型匹配问题

问题代码

for {
  conf <- configRepository.getConf(key)
  info <- customRepository.getInfo(id)
  _ <- DBIO.from(getAdditionalInfo(info))
} yield ()

错误信息

[error] found : Seq[Either[CustomService.Error,Unit]] => slick.dbio.DBIOAction[Unit,slick.dbio.NoStream,Nothing]
[error] required: Seq[Either[CustomService.Error,Unit]] => slick.dbio.DBIOAction[Unit,slick.dbio.NoStream,E2]

解决方案

不需要把for推导式改写成flatMap链式调用,直接在for推导式内为DBIO.from(...)指定类型参数即可解决类型不兼容问题:

方式1:显式指定DBIO.from的类型参数

import slick.dbio.{Effect, NoStream, DBIOAction}

for {
  conf <- configRepository.getConf(key)
  info <- customRepository.getInfo(id)
  _ <- DBIO.from[Seq[Either[CustomService.Error, Unit]], NoStream, Effect.All](getAdditionalInfo(info))
} yield ()

方式2:为该行标注返回类型

import slick.dbio.{Effect, NoStream, DBIOAction}

for {
  conf <- configRepository.getConf(key)
  info <- customRepository.getInfo(id)
  _ <- DBIO.from(getAdditionalInfo(info)): DBIOAction[Unit, NoStream, Effect.All]
} yield ()

问题根源是Slick的DBIOAction要求Effect类型统一,原代码中DBIO.from推导的Effect为Nothing,与前面步骤的Effect约束不匹配,显式指定类型后即可满足要求。

内容的提问来源于stack exchange,提问作者M. Barabas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:33:14