以下是我的问题的简单示例代码。
var a:Int = 1; //第1行
var a = 1; //第2行
第1行需要Int吗?还是必须? 如果没有,我可以像第2行一样删除它吗?
答案 0 :(得分:2)
由于1
的类型为Int
,编译器知道a
的类型为Int
。
这称为类型推断。
当必须指定类型时,编译器无法推断出类型或何时有助于推断其他类型。
在Scala中,类型推断可以从两个方向进行,从右到左,反之亦然。例如val a = 1
a
类型的1
类型是从def myMethod[T](): T = ???
val n: Int = myMethod()
的类型推断出来的,因此类型推断从右到左。在
n
由于Int
应该是T
,编译器会推断myMethod()
中的Int
也应该是degrees
,因此类型推断从左到右右。
https://twitter.github.io/scala_school/type-basics.html#inference
答案 1 :(得分:0)
在这种情况下,您不需要指定Int类型,因为它是由编译器推断的。
有很多关于scala中类型推断的文档。看看这个:http://docs.scala-lang.org/tour/local-type-inference.html
答案 2 :(得分:0)
在大多数情况下,Scala编译器可以自动推断类型。在这些情况下,您不必明确定义变量声明的类型。
var a = 1
是完全有效的Scala代码。
通常建议明确声明公共方法的返回类型。