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

Scala 3隐式参数出现Recursive value needs type错误原因咨询

Scala 3中隐式val触发「Recursive value needs type」错误的原因

问题代码

import scala.concurrent.duration._

@main
def main(): Unit = {
  case class AAA(d: FiniteDuration)

  val duration1 = 5.seconds
  implicit val what = AAA(duration1)
}

报错信息

Recursive value duration1 needs type implicit val what = AAA(duration1)

原因说明

这是Scala 3和Scala 2在隐式类型推导逻辑上的差异导致的:

  • 在Scala 3中,定义隐式val时,编译器会把当前正在定义的这个隐式值提前纳入隐式查找的候选池,参与类型推导过程。
  • 你的代码里,编译器推导duration1的类型时,会扫描上下文里的隐式值(包括还在定义中的what),而what的构造又依赖duration1,形成了循环依赖,因此触发「递归值需要类型」的报错。
  • 改成非隐式val后,编译器不会把它加入隐式查找范围,类型推导会按正常顺序执行:先确定duration1的类型是FiniteDuration,再推导what的类型是AAA,循环依赖的问题也就不存在了。

内容的提问来源于stack exchange,提问作者galbarm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:47:34