[Scala之旅]3-統一型 - TOUR OF SCALA 思否

不言
發布: 2023-03-22 19:20:01
原創
1671 人瀏覽過

在Scala中,所有值都有一個類型,包括數值和函數。下圖示範了類型層次結構的子集。

[Scala之旅]3-統一型 - TOUR OF SCALA 思否

Scala類型層次結構

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

AnyVal 代表值型別。有9種預先定義的值類型,它們是不可為空的:DoubleFloatLongIntShortByteCharUnitBooleanUnit 是一個不具備任何意義的值型別。 Unit 只有一個實例可以像這樣宣告:()。所有函數都必須傳回某個值,因此 Unit 是一個有用的回傳類型。

AnyRef 表示引用型別。所有的非值類型都被定義為引用型別。 Scala中的每個使用者定義類型都是 AnyRef 的子類型。如果Scala是在Java執行環境中使用的,那麼 AnyRef 對應到 Java.lang.object

這裡有一個例子,它示範了字串、整數、字元、布林值和函數都是與其他物件一樣的物件:

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] 的變數列表。這個清單是用各種類型的元素初始化的,但是它們都是 scala.Any 的實例,所以你可以把它們都加到列表中。

下面是程式的輸出:

a string
732
c
true
<function>
登入後複製

類型轉換

值類型可以透過以下方式轉換:

[Scala之旅]3-統一型 - TOUR OF SCALA 思否

##例如:

val x: Long = 987654321
val y: Float = x  // 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  // 9.8765434E8
val z: Long = y  // Does not conform
登入後複製
你也可以將引用型別轉換為子型別。這將在之後的文章中被介紹。

Nothing和Null

Nothing 是所有類型的子類型,也稱為底部類型。類型 Nothing 是沒有值的。常見的用途是發出非終止訊號,例如拋出異常、程式退出或無限循環(即,它是一種沒有對值進行求值的表達式,或是一種不返回正常值的方法)。

Null 是所有引用類型的子類型(即 AnyRef 的任何子類型)。它有一個由關鍵字 null 標識的單一值。 Null 主要用於與其他JVM語言的互通性,並且幾乎不應該在Scala程式碼中使用。我們將在稍後的文章中介紹 null 的替代方案。



#

以上是[Scala之旅]3-統一型 - TOUR OF SCALA 思否的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板