什么时候在scala中声明变量时需要显式类型?

时间:2017-10-15 15:31:25

标签: scala

以下是我的问题的简单示例代码。

var a:Int = 1; //第1行

var a = 1; //第2行

第1行需要Int吗?还是必须? 如果没有,我可以像第2行一样删除它吗?

3 个答案:

答案 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

http://www.scala-lang.org/old/node/127

http://allaboutscala.com/tutorials/chapter-2-learning-basics-scala-programming/scala-tutorial-overview-scala-type-inference/

How does scala infers the type of a variable?

答案 1 :(得分:0)

在这种情况下,您不需要指定Int类型,因为它是由编译器推断的。

有很多关于scala中类型推断的文档。看看这个:http://docs.scala-lang.org/tour/local-type-inference.html

答案 2 :(得分:0)

在大多数情况下,Scala编译器可以自动推断类型。在这些情况下,您不必明确定义变量声明的类型。

var a = 1

是完全有效的Scala代码。

通常建议明确声明公共方法的返回类型。