Scala變數


變數是儲存儲存值的記憶體位置的名稱。這意味著當建立變數時,可以在記憶體中保留一些空間。

根據變數的資料型別,編譯器分配記憶體並決定可以儲存在預留記憶體中的內容。因此,通過為變數分配不同的資料型別,可以在這些變數中儲存整數,小數或字元。

變數宣告

Scala具有用於宣告變數的不同語法。它們可以被定義為值,即常數或變數。 這裡,myVar使用關鍵字var宣告。 它是一個可以改變值的變數,這稱為可變變數。 以下是使用var關鍵字定義變數的語法 -

語法

var myVar : String = "Foo"

下面範例中,myVal使用關鍵字val宣告。它是一個不能被改變的變數,這被稱為不可變變數。 以下是使用val關鍵字定義變數的語法 -

val myVal : String = "Foo"

可變資料型別

變數的型別在變數名稱和等號之前指定。可以通過其資料型別來定義任何型別的Scala變數,如下所示:

val or val VariableName : DataType = [Initial Value]

如果您沒有為變數分配任何初始值,則有效的語法如下:

var myVar :Int;
val myVal :String;

可變型別推斷

當為變數分配初始值時,Scala編譯器可以根據分配給它的值來推斷變數的型別。這被稱為變數型別推斷。 因此,可以編寫這樣的變數宣告 -

var myVar = 10;
val myVal = "Hello, Scala!";

預設情況下,myVar將會被計算推斷為Int型別,myVal將計算推斷為String型別變數。

多個賦值

Scala支援多個賦值。如果程式碼塊或方法返回一個元組(Tuple - 保持不同型別的物件的集合),則可以將元組分配給一個val變數。

註:我們將在隨後的章節學習元組。

val (myVar1: Int, myVar2: String) = Pair(40, "Foo")

型別推斷得到正確的型別 -

val (myVar1, myVar2) = Pair(40, "Foo")

範例程式

以下是一個範例程式,用於說明Scala中變數宣告的過程。該程式宣告了四個變數 - 兩個變數用變數宣告定義,其餘兩個變數沒有變數宣告。

例子

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中,使用以下命令用於編譯和執行此程式。

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中的變數可以有三個不同的範圍,具體取決於它們被使用的位置。它們可以作為欄位存在,作為方法引數和區域性變數存在。以下是每種型別範圍的詳細資訊。

欄位

欄位是屬於物件的變數。這些欄位可以從物件中的每個方法的內部存取。根據欄位宣告的存取修飾符,也可以在物件外部存取欄位。 物件欄位可以是可變的和不可變的型別,可以使用varval來定義。

方法引數

方法引數是在呼叫該方法時用於傳遞方法中的值的變數。方法引數只能從方法內部存取,但是如果從方法外部參照了物件,則可以從外部存取傳入的物件。方法引數始終是不可變的,由val關鍵字定義。

區域性變數

區域性變數是在方法中宣告的變數。區域性變數只能從方法內部存取,但如果從方法返回,則您建立的物件可能會跳脫該方法。區域性變數可以是可變的和不可變的型別,可以使用varval定義。