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

Scala 3中变量赋值前使用却编译成功的异常问题

Scala 3中变量赋值前使用却编译成功的异常问题

嘿,这个问题乍一看确实有点反直觉对吧?我来给你拆解下到底发生了什么:

首先你写的这段代码其实是一个递归赋值的场景,把它补全大括号后逻辑会更清晰:

val x: Int = {
  val y: Int = x + 10
  y
}

Scala 3对于这种数值类型的递归val初始化,会先给x分配该类型的默认初始值——Int的默认值是0。所以当计算y = x + 10的时候,x此时的取值是默认的0,那y自然就是10,最后把y的值赋给x,所以最终x的结果就是10啦。

可能你会好奇为什么编译器没报错?这是因为Scala 3放宽了部分前向引用的限制,对于数值类型、引用类型这些有默认值的类型,允许在val的初始化表达式里引用自身,编译器会先用默认值完成初始计算,最后再把最终结果赋值给变量。

要是换成没有默认值的类型(比如自定义的case class),这种写法就会直接抛出初始化错误了,你可以试试,立马就能看到报错~

备注:内容来源于stack exchange,提问作者jakeis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 13:08:20