我总是着迷于scala如何总是正确地推断出类型。 scala是怎么做到的?
scala> val num = 5
num: Int = 5
scala> val num = "5"
num: String = 5
我知道这可能是一个非常愚蠢的问题,但我不知道答案。 请赐教。 谢谢!
答案 0 :(得分:3)
有几种方法可以推断变量的类型。主要使用基于逻辑理论的那些称为推理规则。
有很多论文解释了背后的理论。在这里,我提出了一个很好的例子(使用Scala;))
答案 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
的代码类型推断为Int
,b
的类型推断为String
。
基于此表达式,1调用函数Int.+(x: Int): Int,返回Int
,因此x
的类型猜测为Int
。
类似地,表达式2调用函数StringOps.+(arg0: Any): String,返回String
,因此y
的类型猜测为String
。