Scala Option[T]
是由給定型別的零或一個元素的一種容器。Option[T]
可以是 Some [T]
或None
物件,它代表缺少的值。 例如,如果已找到與給定鍵對應的值,則Scala的Map的get
方法會生成Some(value)
,如果在Map
中未定義給定的鍵,則將返回None
。
Option
型別在Scala程式中經常使用,可以將其與Java中可用的null
值進行比較,表示null
值。 例如,java.util.HashMap
的get
方法返回儲存在HashMap
中的值,如果沒有找到值,則返回null
。
假設我們有一種基於主鍵從資料庫中檢索記錄的方法。
def findPerson(key: Int): Option[Person]
如果找到記錄,該方法將返回Some [Person]
,如果沒有找到該記錄,則返回None
。下面來看看看以下程式程式碼 -
範例
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("capitals.get( \"France\" ) : " + capitals.get( "France" ))
println("capitals.get( \"India\" ) : " + capitals.get( "India" ))
}
}
將上述程式儲存在原始檔:Demo.scala中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>scala Demo
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None
將可選值分開的最常見方法是通過模式匹配。例如嘗試以下程式 -
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
}
def show(x: Option[String]) = x match {
case Some(s) => s
case None => "?"
}
}
將上述程式儲存在原始檔:Demo.scala中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>scala Demo
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?
以下是範例程式,顯示如何在沒有值的情況下使用getOrElse()
方法來存取值或預設值。
object Demo {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.getOrElse(0): " + a.getOrElse(0) )
println("b.getOrElse(10): " + b.getOrElse(10) )
}
}
將上述程式儲存在原始檔:Demo.scala中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>scala Demo
a.getOrElse(0): 5
b.getOrElse(10): 10
以下是顯示如何使用isEmpty()
方法檢查該選項是否為None
的範例程式。
object Demo {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.isEmpty: " + a.isEmpty )
println("b.isEmpty: " + b.isEmpty )
}
}
將上述程式儲存在原始檔:Demo.scala中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>scala Demo
a.isEmpty: false
b.isEmpty: true