簡單接觸Scala底層類型
作者:Martin Odersky等
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第十一章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。
在圖釋11.1類型層級的底部你看到了兩個類scala.Null和Scala.Nothing。它們是用統一的方式處理某些Scala的面向對象類型系統的“邊界情況”的特殊類型。
51CTO編輯推薦:Scala編程語言專題
類Null是null類型的引用;它是每個引用類(就是說,每個繼承自AnyRef的類)的子類。Null不兼容值類型。你不可,比方說,把null值賦給整數變量:
類型Nothing在Scala的類層級的***端;它是任何其它類型的子類型。然而,根本沒有這個類型的任何值。要一個沒有值的類型有什么意思呢?7.4節中討論過,Nothing的一個用處是它標明了不正常的終止。例如Scala的標準庫中的Predef對象有一個error方法,如下定義:
- scala>val i: Int = null
- < console>:4:error:typemismatch;
- found:Null(null)
- required:Int
error的返回類型是Nothing,告訴用戶方法不是正常返回的(代之以拋出了異常)。因為Nothing是任何其它類型的子類,你可以非常靈活的使用像error這樣的方法。例如:
- def error(message:String): Nothing = throw new RuntimeException(message)
- def divide(x:Int, y:Int): Int =
- if(y != 0) x / y
- else error("can't divide by zero")
“那么”狀態分支,x / y,類型為Int,而“否則”(else)分支,調用了error,類型為Nothing。因為Nothing是Int的子類型,整個狀態語句的類型是Int,正如需要的那樣。
【相關閱讀】
責任編輯:book05
來源:
Artima