Scala的四種空值類型

Scala中有四種空的類型None,Nothing,Null,Nil
None是一個object,是Option的子類型。

case object None extends Option[Nothing] {  
  def isEmpty = true  
  def get = throw new NoSuchElementException("None.get")  
}

scala推薦在可能返回空的方法使用Option[X]作為返回類型。如果有值就返回Some[X]. Some也是Option的子類),否則返回None,例如

def get(key: A): Option[B] = {  
    if (contains(key))  
        Some(getValue(key))  
    else  
        None  
} 

Null是所有AnyRef的子類,在scala的類型系統(tǒng)中,AnyRef是Any的子類,同時Any子類的還有AnyVal。對應(yīng)java值類型的所有類型都是AnyVal的子類。所以Null可以賦值給所有的引用類型(AnyRef),不能賦值給值類型,這個java的語義是相同的。 null是Null的唯一對象。

Nothing是所有類型的子類,也是Null的子類。Nothing沒有對象,但是可以用來定義類型。例如,如果一個方法拋出異常,則異常的返回值類型就是Nothing(雖然不會返回)

def get(index:Int):Int = {  
    if(x < 0) throw new Exception(...)  
    else ....  
} 

if語句是表達式,有返回值,必然有返回值類型,如果x < 0,拋出異常,返回值的類型為Nothing,Nothing也是Int的子類,所以,if表達式的返回類型為Int,get方法的返回值類型也為Int。

Nil是一個空的List,定義為List[Nothing],根據(jù)List的定義List[+A],所有Nil是所有List[T]的子類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容