變量是保存存儲(chǔ)值的內(nèi)存位置的名稱。這意味著當(dāng)創(chuàng)建變量時(shí),可以在內(nèi)存中保留一些空間。
根據(jù)變量的數(shù)據(jù)類型,編譯器分配內(nèi)存并決定可以存儲(chǔ)在預(yù)留內(nèi)存中的內(nèi)容。因此,通過(guò)為變量分配不同的數(shù)據(jù)類型,可以在這些變量中存儲(chǔ)整數(shù),小數(shù)或字符。
Scala具有用于聲明變量的不同語(yǔ)法。它們可以被定義為值,即常數(shù)或變量。 這里,myVar
使用關(guān)鍵字var
聲明。 它是一個(gè)可以改變值的變量,這稱為可變變量。 以下是使用var
關(guān)鍵字定義變量的語(yǔ)法 -
語(yǔ)法
var myVar : String = "Foo"
下面示例中,myVal
使用關(guān)鍵字val
聲明。它是一個(gè)不能被改變的變量,這被稱為不可變變量。 以下是使用val
關(guān)鍵字定義變量的語(yǔ)法 -
val myVal : String = "Foo"
變量的類型在變量名稱和等號(hào)之前指定??梢酝ㄟ^(guò)其數(shù)據(jù)類型來(lái)定義任何類型的Scala變量,如下所示:
val or val VariableName : DataType = [Initial Value]
如果您沒(méi)有為變量分配任何初始值,則有效的語(yǔ)法如下:
var myVar :Int;
val myVal :String;
當(dāng)為變量分配初始值時(shí),Scala編譯器可以根據(jù)分配給它的值來(lái)推斷變量的類型。這被稱為變量類型推斷。 因此,可以編寫這樣的變量聲明 -
var myVar = 10;
val myVal = "Hello, Scala!";
默認(rèn)情況下,myVar
將會(huì)被計(jì)算推斷為Int
類型,myVal
將計(jì)算推斷為String
類型變量。
Scala支持多個(gè)賦值。如果代碼塊或方法返回一個(gè)元組(Tuple - 保持不同類型的對(duì)象的集合),則可以將元組分配給一個(gè)val
變量。
注:我們將在隨后的章節(jié)學(xué)習(xí)元組。
val (myVar1: Int, myVar2: String) = Pair(40, "Foo")
類型推斷得到正確的類型 -
val (myVar1, myVar2) = Pair(40, "Foo")
以下是一個(gè)示例程序,用于說(shuō)明Scala中變量聲明的過(guò)程。該程序聲明了四個(gè)變量 - 兩個(gè)變量用變量聲明定義,其余兩個(gè)變量沒(méi)有變量聲明。
例子
object Demo {
def main(args: Array[String]) {
var myVar :Int = 10;
val myVal :String = "Hello Scala with datatype declaration.";
var myVar1 = 20;
val myVal1 = "Hello Scala new without datatype declaration.";
println(myVar); println(myVal); println(myVar1);
println(myVal1);
}
}
將上述程序保存在源文件:Demo.scala中,使用以下命令用于編譯和執(zhí)行此程序。
D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
10
Hello Scala with datatype declaration.
20
Hello Scala new without datatype declaration.
D:\software\scala-2.12.3\bin>
Scala中的變量可以有三個(gè)不同的范圍,具體取決于它們被使用的位置。它們可以作為字段存在,作為方法參數(shù)和局部變量存在。以下是每種類型范圍的詳細(xì)信息。
字段
字段是屬于對(duì)象的變量。這些字段可以從對(duì)象中的每個(gè)方法的內(nèi)部訪問(wèn)。根據(jù)字段聲明的訪問(wèn)修飾符,也可以在對(duì)象外部訪問(wèn)字段。 對(duì)象字段可以是可變的和不可變的類型,可以使用var
或val
來(lái)定義。
方法參數(shù)
方法參數(shù)是在調(diào)用該方法時(shí)用于傳遞方法中的值的變量。方法參數(shù)只能從方法內(nèi)部訪問(wèn),但是如果從方法外部引用了對(duì)象,則可以從外部訪問(wèn)傳入的對(duì)象。方法參數(shù)始終是不可變的,由val
關(guān)鍵字定義。
局部變量
局部變量是在方法中聲明的變量。局部變量只能從方法內(nèi)部訪問(wèn),但如果從方法返回,則您創(chuàng)建的對(duì)象可能會(huì)轉(zhuǎn)義該方法。局部變量可以是可變的和不可變的類型,可以使用var
或val
定義。