這是我的問題的簡單示例代碼。什麼時候在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代碼。
通常建議顯式聲明公共方法的返回類型。