Scala for推导式中map结果被识别为Int而非Seq[Int]问题咨询
问题根源:误用了for推导式的元素提取符 <-
你遇到的问题核心在于错误地用<-来处理ID序列,导致编译器把ids解析成单个Int,而非你期望的Seq[Int]。
为什么会这样?
先拆解你的for推导式逻辑:
t <- db.getSomething():这里没问题,db.getSomething()返回Future[Seq[SomeObject]],<-会从Future中提取出内部的Seq[SomeObject]赋值给t。ids <- t.map(_.id).toSeq:这里出问题了!t.map(_.id)已经生成了Seq[Int],而for推导式里的<-是用来遍历容器元素的——它会把这个Seq[Int]拆成一个个单独的Int,每次循环给ids赋值一个单个的ID,所以编译器自然认为ids是Int类型。- 后续调用
fetchOtherRelatedDetails(ids)时,函数期望接收Seq[Int],但传入的是单个Int,类型不匹配就报错了。
修复方案:改用=定义中间变量
在for推导式里,如果你只是想定义一个中间变量(而不是遍历容器),应该用=而不是<-。修改后的代码如下:
val d = for { t <- db.getSomething() ids = t.map(_.id).toSeq // 用=替代<-,保留整个Seq[Int] histo <- fetchOtherRelatedDetails(ids) } yield histo
这样ids就会被正确识别为Seq[Int]类型,完全符合fetchOtherRelatedDetails的参数要求。
简单总结:for推导式中,<-用于从Future/Seq/Option等容器中提取单个元素,=用于定义中间计算变量——别搞混这两个符号的用途哦!
内容的提问来源于stack exchange,提问作者user3792688
相关产品推荐
相关产品推荐

