Scala 導覽

統一類型

語言

在 Scala 中,所有值都有類型,包括數字值和函式。下方的圖表說明了類型階層的子集。

Scala Type Hierarchy

Scala 類型階層

Any 是所有類型的超類型,也稱為頂層類型。它定義了某些通用方法,例如 equalshashCodetoStringAny 有兩個直接子類別:AnyValAnyRef

AnyVal 代表值類型。有九種預定義的值類型,且它們不能為空:DoubleFloatLongIntShortByteCharUnitBooleanUnit 是一種不帶有有意義資訊的值類型。Unit 有一個實例,可以用以下方式宣告:()。所有函式都必須回傳一些內容,所以有時 Unit 是有用的回傳類型。

AnyRef 代表參考類型。所有非值類型都定義為參考類型。Scala 中每個使用者定義的類型都是 AnyRef 的子類型。如果 Scala 用於 Java 執行時間環境中,AnyRef 會對應到 java.lang.Object

以下範例說明字串、整數、字元、布林值和函式都和所有其他物件一樣,都是 Any 類型

val list: List[Any] = List(
  "a string",
  732,  // an integer
  'c',  // a character
  true, // a boolean value
  () => "an anonymous function returning a string"
)

list.foreach(element => println(element))

它定義一個 List[Any] 類型的值 list。清單使用各種類型的元素初始化,但每個元素都是 scala.Any 的實例,所以你可以將它們新增到清單中。

以下是程式碼的輸出

a string
732
c
true
<function>

類型轉換

值類型可以用以下方式轉換:Scala 類型階層

例如

val x: Long = 987654321
val y: Float = x.toFloat  // 9.8765434E8 (note that some precision is lost in this case)

val face: Char = '☺'
val number: Int = face  // 9786

轉換是單向的。這無法編譯

val x: Long = 987654321
val y: Float = x.toFloat  // 9.8765434E8
val z: Long = y  // Does not conform

你也可以將參考類型轉換為子類型。這會在後面的導覽中說明。

Nothing 和 Null

Nothing 是所有類型的子類型,也稱為底層類型。沒有任何值具有 Nothing 類型。常見的用法是表示非終止,例如拋出的例外、程式退出或無限迴圈(即它是不會評估為值的表達式或不會正常返回的方法的類型)。

Null 是所有參考類型的子類型(即 AnyRef 的任何子類型)。它有一個由關鍵字文字 null 識別的單一值。提供 Null 主要用於與其他 JVM 語言的互操作性,幾乎不應在 Scala 程式碼中使用。我們將在後面的導覽中介紹 null 的替代方案。

此頁面的貢獻者