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

Scala如何判断推导的返回类型?下述代码变量b的推导类型是什么

Scala代码类型推导问题解答

代码片段

val a=10; val b=if(a==5) println("hello") else (1,"hi")

变量b的推导类型

Any

类型推导逻辑

Scala中if是带返回值的表达式,整个表达式的最终类型由两个分支返回类型的**最近公共父类型(LUB, Least Upper Bound)**决定,推导过程如下:

  • if分支执行println("hello"),该语句返回值为Unit类型,属于AnyVal的子类
  • else分支返回二元组(1, "hi"),类型为(Int, String)(即Tuple2[Int, String]),属于AnyRef的子类
  • AnyVal和AnyRef是Scala类型系统中两个并行的顶层子类型,二者唯一的公共父类型是Any,因此整个if表达式的类型被推导为Any,也就是变量b的类型

注意:Scala的类型推导是编译期的静态行为,不会考虑运行时实际会走入哪个分支,哪怕这里a固定为10永远走else分支,也会同时统计两个分支的类型做计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:24:00