- Scala 教程
- Scala - 首页
- Scala - 概述
- Scala - 特性
- Scala - 环境搭建
- Scala - 构建工具 (SBT)
- Scala - 基本语法
- 数据类型和变量
- Scala - 数据类型
- Scala - 变量
- Scala - 字符串
- Scala - 数组
- Scala 运算符
- Scala - 运算符
- Scala - 算术运算符
- Scala - 关系运算符
- Scala - 逻辑运算符
- Scala - 位运算符
- Scala - 赋值运算符
- Scala 条件语句
- Scala - if else 语句
- Scala 循环语句
- Scala - 循环语句
- Scala - while 循环
- Scala - do-while 循环
- Scala - for 循环
- Scala - break 语句
- Scala 类与对象
- Scala - 类与对象
- Scala - 访问修饰符
- Scala 方法与函数
- Scala - 函数
- Scala - 按名调用函数 (Call-by-Name)
- Scala - 带命名参数的函数
- Scala - 带变长参数的函数
- Scala - 递归函数
- Scala - 默认参数值
- Scala - 高阶函数
- Scala - 嵌套函数
- Scala - 匿名函数
- 部分应用函数
- Scala - 柯里化函数
- Scala 集合
- Scala - 集合
- Scala - 列表 (Lists)
- Scala - 集合 (Sets)
- Scala - 映射 (Maps)
- Scala - 元组 (Tuples)
- Scala - 迭代器 (Iterators)
- Scala - 可选值 (Options)
- Scala 模式匹配
- Scala - 模式匹配
- Scala - 异常处理
- Scala - 提取器 (Extractors)
- Scala - 正则表达式
- Scala 文件 I/O
- Scala - 文件 I/O
- Scala 高级概念
- Scala - 闭包 (Closures)
- Scala - 特质 (Traits)
- Scala 有用资源
- Scala - 快速指南
- Scala - 在线编译器
- Scala - 有用资源
- Scala - 讨论
Scala - 可选值 (Options)
Scala 的 `Option[T]` 是一个容器,它包含零个或一个给定类型的元素。`Option[T]` 可以是 `Some[T]` 或 `None` 对象,`None` 表示缺少值。例如,Scala 的 `Map` 的 `get` 方法如果找到与给定键对应的值,则返回 `Some(value)`;如果给定键在 `Map` 中未定义,则返回 `None`。
`Option` 类型在 Scala 程序中经常使用,您可以将其与 Java 中的 `null` 值进行比较,`null` 值表示没有值。例如,`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 Option 方法
以下是使用 Option 时可以使用的重要方法。有关可用方法的完整列表,请查看 Scala 的官方文档。
序号 | 方法及描述 |
---|---|
1 |
`def get: A` 返回选项的值。 |
2 |
`def isEmpty: Boolean` 如果选项为 `None`,则返回 `true`,否则返回 `false`。 |
3 |
`def productArity: Int` 此乘积的大小。对于乘积 A(x_1, ..., x_k),返回 k。 |
4 |
`def productElement(n: Int): Any` 此乘积的第 n 个元素(从 0 开始)。换句话说,对于乘积 A(x_1, ..., x_k),返回 x_(n+1),其中 0 < n < k。 |
5 |
`def exists(p: (A) => Boolean): Boolean` 如果此选项非空且谓词 p 在应用于此 Option 的值时返回 true,则返回 true。否则,返回 false。 |
6 |
`def filter(p: (A) => Boolean): Option[A]` 如果此选项非空且将谓词 p 应用于此 Option 的值返回 true,则返回此 Option。否则,返回 None。 |
7 |
`def filterNot(p: (A) => Boolean): Option[A]` 如果此选项非空且将谓词 p 应用于此 Option 的值返回 false,则返回此 Option。否则,返回 None。 |
8 |
`def flatMap[B](f: (A) => Option[B]): Option[B]` 如果此 Option 非空,则返回将 f 应用于此 Option 值的结果。如果此 Option 为空,则返回 None。 |
9 |
`def foreach[U](f: (A) => U): Unit` 如果选项非空,则将给定的过程 f 应用于选项的值。否则,什么也不做。 |
10 |
`def getOrElse[B >: A](default: => B): B` 如果选项非空,则返回选项的值;否则,返回计算 default 的结果。 |
11 |
`def isDefined: Boolean` 如果选项是 Some 的实例,则返回 true,否则返回 false。 |
12 |
`def iterator: Iterator[A]` 返回一个单例迭代器,如果选项非空,则返回 Option 的值;如果选项为空,则返回空迭代器。 |
13 |
`def map[B](f: (A) => B): Option[B]` 如果此 Option 非空,则返回一个包含将 f 应用于此 Option 值的结果的 Some。否则返回 None。 |
14 |
`def orElse[B >: A](alternative: => Option[B]): Option[B]` 如果此 Option 非空,则返回此 Option;否则,返回计算 alternative 的结果。 |
15 |
`def orNull` 如果选项非空,则返回选项的值;如果为空,则返回 null。 |