Scala Options
Scala Option[T] 是一个容器,用于存储给定类型的零个或一个元素。Option[T] 可以是 Some[T] 对象,也可以是 None 对象,它表示缺失的值。例如,Scala 的 Map 的 get 方法会在找到与给定键对应的值时返回 Some(value),否则返回 None 。
Option 类型在 Scala 程序中经常被使用,你可以将其与 Java 中的 null 值进行比较,后者表示没有值。例如,java.util.HashMap 的 get 方法将在 HashMap 中找到值时返回该值,否则返回 null。
假设我们有一个基于主键从数据库中检索记录的方法。
如果找到记录,该方法将返回Some[Person],但是如果未找到记录,则返回None。让我们按照以下程序进行。
示例
将以上的程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
命令
输出
将可选值分开的最常用方法是通过模式匹配。例如,尝试以下程序。
示例
将上面的程序保存在 Demo.scala 中。以下命令用于编译和执行这个程序。
命令
输出
使用getOrElse()方法
以下是一个示例程序,演示如何使用getOrElse()方法在没有值的情况下访问一个值或默认值。
示例
将上面的程序保存在 Demo.scala 文件中。以下命令用于编译和执行该程序。
输出
使用isEmpty()方法
以下是一个示例程序,展示如何使用isEmpty()方法来检查选项是否为None。
示例
将以上程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
命令
示例
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应用于该选项的值返回true,则返回true;否则返回false。 |
6 | def filter(p: (A) = > Boolean): Option[A] 如果Option非空并且将谓词p应用于Option的值返回true,则返回该Option。否则,返回None。 |
7 | def filterNot(p: (A) = > Boolean): Option[A] 如果Option非空并且将谓词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 如果Option非空,则将给定的过程f应用于该Option的值。否则,什么都不做。 |
10 | def getOrElse[B >: A](default: => B): B 如果Option是非空的,则返回Option的值,否则返回计算default的结果。 |
11 | def isDefined: Boolean 如果Option是Some的实例,则返回true,否则返回false。 |
12 | def iterator: Iterator[A] 如果Option是非空的,则返回一个单例的迭代器,返回Option的值;如果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 如果Option非空,则返回Option的值,否则返回null。 |