選項

除非與期望 null 的遺留 Java 程式碼互動,否則強烈建議不要使用 null 值。相反, Option 時,應使用一個函式的結果可能要麼是東西(Some)或沒有(None)。

try-catch 塊更適合於錯誤處理,但如果函式可以合法地返回任何內容,則 Option 適合使用,並且很簡單。

Option[T] 可以是 Some(value)(包含 T 型別的值)或 None

def findPerson(name: String): Option[Person]

如果沒有人找到,可以退回 None。否則,返回包含 Person 物件的 Some 型別的物件。以下是處理 Option 型別物件的方法。

模式匹配

`findPerson(personName)` match {
    case `Some(person)` => `println(person.surname)`
    case None => println(s"No person found with name $personName")
}

使用 mapgetOrElse

val name = `findPerson(personName)`.map(_.firstName).getOrElse("Unknown")
`println(name)` // Prints either the name of the found person or "Unknown"

使用摺疊

val name = `findPerson(personName)`.fold("Unknown")(_.firstName)
// equivalent to the map getOrElse example above.

轉換為 Java

如果需要將 Option 型別轉換為可歸零的 Java 型別以實現互操作性:

val s: Option[String] = Option("hello")
s.orNull           // "hello": String
s.getOrElse(null)  // "hello": String

val n: Option[Int] = Option(42)
n.orNull           // compilation failure (Cannot prove that Null <:< Int.)
n.getOrElse(null)  // 42