選項
除非與期望 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")
}
使用 map 和 getOrElse
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