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