在Scala中,所有值都有一個類型,包括數值和函數。下圖示範了類型層次結構的子集。
#Any
類型是所有類型的父類型,也稱為頂級類型。它定義了一些通用的方法,如 equals
、hashCode
和 toString
。 Any
有兩個直接子類別:AnyVal
和 AnyRef
。
AnyVal
代表值型別。有9種預先定義的值類型,它們是不可為空的:Double
、Float
、Long
、Int
、Short
、Byte
、Char
、Unit
和Boolean
。 Unit
是一個不具備任何意義的值型別。 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>
值類型可以透過以下方式轉換:
##例如:
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 是所有類型的子類型,也稱為底部類型。類型
Nothing 是沒有值的。常見的用途是發出非終止訊號,例如拋出異常、程式退出或無限循環(即,它是一種沒有對值進行求值的表達式,或是一種不返回正常值的方法)。
Null 是所有引用類型的子類型(即
AnyRef 的任何子類型)。它有一個由關鍵字
null 標識的單一值。
Null 主要用於與其他JVM語言的互通性,並且幾乎不應該在Scala程式碼中使用。我們將在稍後的文章中介紹
null 的替代方案。
#
以上是[Scala之旅]3-統一型 - TOUR OF SCALA 思否的詳細內容。更多資訊請關注PHP中文網其他相關文章!