sealed 關鍵字表示,其修飾的trait只能在當前文件裏頭被繼承編程
sealed trait Answer case object Yes extends Answer case object No extends Answer
sealed abstract 表示,其修飾的class,只能在當前文件裏頭被繼承scala
def process(request:Trade){ request match{ case Buy(name) => println("buy:"+name) case Sale(name) => println("sale:"+name) } } val op = Buy("IBM") process(op)
一般用在case class,case class 有兩個特色:一、不用new,用括號便可產生實例 二、構造器參數默認是valcode
用sealed修飾這樣作的目的是告訴scala編譯器在檢查模式匹配的時候,讓scala知道這些case的全部狀況,scala就可以在編譯的時候進行檢查,看你寫的代碼是否有沒有漏掉什麼沒case到,減小編程的錯誤。繼承
如上例子,若是沒有case sale的話,會警告,match may not be exhaustive. It would failed on the following input:Sale(_)input