选项
除非与期望 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