scala如何推断变量的类型?

时间:2017-10-02 07:17:01

标签: scala type-inference

我总是着迷于scala如何总是正确地推断出类型。 scala是怎么做到的?

scala> val num = 5
num: Int = 5

scala> val num = "5"
num: String = 5

我知道这可能是一个非常愚蠢的问题,但我不知道答案。 请赐教。 谢谢!

2 个答案:

答案 0 :(得分:3)

有几种方法可以推断变量的类型。主要使用基于逻辑理论的那些称为推理规则

有很多论文解释了背后的理论。在这里,我提出了一个很好的例子(使用Scala;))

www2.in.tum.de/hp/file?fid=879

答案 1 :(得分:0)

解析代码编译时可以推断出5类型为Int"5"属于String类型。
简单来说,用双引号"括起的任何值都将被视为String,单引号'中包含的值被视为Char,数字被视为Int(除非另有说明) 。 这进一步用于推断表达结果的类型。

考虑这个例子

val a = 5     // translates to val a:Int = 5
val b = "5"   // translates to val b:String = "5"
val x = a+1   // expression 1
val y = b+1   // expression 2

在此示例中,a的代码类型推断为Intb的类型推断为String
基于此表达式,1调用函数Int.+(x: Int): Int,返回Int,因此x的类型猜测Int
类似地,表达式2调用函数StringOps.+(arg0: Any): String,返回String,因此y的类型猜测String