📅  最后修改于: 2020-11-02 04:31:51             🧑  作者: Mango
Scala Option [T]是给定类型的零个或一个元素的容器。 Option [T]可以是Some [T]或None对象,表示缺少值。例如,Scala Map的get方法如果找到了与给定键相对应的值,则生成Some(value);如果Map中未定义给定键,则生成None 。
选项类型在Scala程序中经常使用,您可以将其与Java中可用的空值(表示无值)进行比较。例如,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中。以下命令用于编译和执行该程序。
\>scalac Demo.scala
\>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中。以下命令用于编译和执行该程序。
\>scalac Demo.scala
\>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中。以下命令用于编译和执行该程序。
\>scalac Demo.scala
\>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中。以下命令用于编译和执行该程序。
\>scalac Demo.scala
\>scala Demo
a.isEmpty: false
b.isEmpty: true