- Scala Tutorial
- Scala - Home
- Scala - Overview
- Scala - Environment Setup
- Scala - Basic Syntax
- Scala - Data Types
- Scala - Variables
- Scala - Classes & Objects
- Scala - Access Modifiers
- Scala - Operators
- Scala - IF ELSE
- Scala - Loop Statements
- Scala - Functions
- Scala - Closures
- Scala - Strings
- Scala - Arrays
- Scala - Collections
- Scala - Traits
- Scala - Pattern Matching
- Scala - Regular Expressions
- Scala - Exception Handling
- Scala - Extractors
- Scala - Files I/O
- Scala Useful Resources
- Scala - Quick Guide
- Scala - Useful Resources
- Scala - Discussion
Scala - 选项
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() 方法
以下示例程序展示了如何使用 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() 方法
下面的示例程序展示了如何使用 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
Scala 选项方法
以下是您在使用选项时可以使用的重要方法。有关可用方法的完整列表,请查看 Scala 官方文档。
先生编号 | 带有描述的方法 |
---|---|
1 |
默认得到:A 返回选项的值。 |
2 |
def isEmpty: 布尔值 如果选项为 None,则返回 true,否则返回 false。 |
3 |
def 产品数量: Int 本产品的尺寸。对于乘积 A(x_1, ..., x_k),返回 k |
4 |
def ProductElement(n: Int): 任意 该乘积的第 n 个元素,从 0 开始。换句话说,对于乘积 A(x_1, ..., x_k),返回 x_(n+1),其中 0 < n < k。 |
5 |
def 存在(p: (A) => 布尔值): 布尔值 如果此选项非空且谓词 p 在应用于此选项的值时返回 true,则返回 true。否则,返回 false。 |
6 |
def 过滤器(p: (A) => 布尔值): 选项[A] 如果此选项非空,则返回此选项,并将谓词 p 应用于此选项的值将返回 true。否则,返回 None。 |
7 |
def filterNot(p: (A) => 布尔值): 选项[A] 如果此选项非空,则返回此选项,并将谓词 p 应用于此选项的值将返回 false。否则,返回 None。 |
8 |
def flatMap[B](f: (A) => 选项[B]): 选项[B] 如果此选项非空,则返回将 f 应用于此选项的值的结果。如果此选项为空,则返回 None。 |
9 |
def foreach[U](f: (A) => U): 单位 如果选项的值非空,则将给定过程 f 应用于该值。否则,什么也不做。 |
10 |
def getOrElse[B >: A](默认: => B): B 如果选项非空,则返回选项的值,否则返回默认值的计算结果。 |
11 |
def isDefined: 布尔值 如果选项是 Some 的实例,则返回 true,否则返回 false。 |
12 |
def迭代器:迭代器[A] 返回一个单例迭代器,如果选项非空,则返回选项的值;如果选项为空,则返回空迭代器。 |
13 |
def 地图[B](f: (A) => B): 选项[B] 如果此选项非空,则返回 Some,其中包含将 f 应用于此选项的值的结果。否则返回 None。 |
14 |
def orElse[B >: A](替代: => 选项[B]): 选项[B] 如果该选项非空,则返回该选项,否则返回评估替代项的结果。 |
15 |
定义或空 如果选项的值非空,则返回该值;如果为空,则返回 null。 |