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
相关产品推荐
相关产品推荐

