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

