当前位置: 首页 > 文档资料 > Scala 中文文档 >

Scala Options

优质
小牛编辑
134浏览
2023-12-01

Scala Option [T]是给定类型的零个或一个元素的容器。 Option [T]可以是Some[T]None对象,表示缺失值。 例如,如果找到了与给定键对应的值,则Scala的Map的get方法会产生Some(值),如果Map中没有定义给定的键,则产生None

在Scala程序中经常使用选项类型,您可以将其与Java中可用的null值进行比较,该值表示没有值。 例如,java.util.HashMap的get方法返回存储在HashMap中的值,如果没有找到值则返回null。

假设我们有一个方法可以根据主键从数据库中检索记录。

def findPerson(key: Int): Option[Person]

如果找到记录,该方法将返回Some [Person]但如果未找到记录则返回None。 让我们按照以下计划。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

输出 (Output)

capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

将可选值分开的最常见方法是通过模式匹配。 例如,尝试以下程序。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

输出 (Output)

show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

Using getOrElse() Method

以下是示例程序,用于说明如何使用getOrElse()方法访问值,或者在没有值时使用默认值。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

输出 (Output)

a.getOrElse(0): 5
b.getOrElse(10): 10

Using isEmpty() Method

以下示例程序显示如何使用isEmpty()方法检查选项是否为None。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

例子 (Example)

a.isEmpty: false
b.isEmpty: true

Scala选项方法

以下是您在使用选项时可以使用的重要方法。 有关可用方法的完整列表,请查看Scala的官方文档。

Sr.No带描述的方法
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

5

def exists(p: (A) =》 Boolean): Boolean

如果此选项为非空且返回true,则谓词p在应用于此Option的值时返回true。 否则,返回false。

6

def filter(p: (A) =》 Boolean): Option[A]

如果它是非空的,则返回此选项,并将谓词p应用于此选项的值,返回true。 否则,返回None。

7

def filterNot(p: (A) =》 Boolean): Option[A]

如果它是非空的,则返回此选项,并将谓词p应用于此选项的值,返回false。 否则,返回None。

8

def flatMap[B](f: (A) =》 Option[B]): Option[B]

如果此Option为非空,则返回将f应用于此Option的值的结果。 如果此选项为空,则返回None。

9

def foreach[U](f: (A) =》 U): Unit

将给定的过程f应用于选项的值,如果它是非空的。 否则,什么也不做。

10

def getOrElse[B 》: A](default: =》 B): B

如果选项为非空,则返回选项的值,否则返回评估默认值的结果。

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的值的结果。 否则返回None。

14

def orElse[B 》: A](alternative: =》 Option[B]): Option[B]

如果它是非空的,则返回此选项,否则返回评估替代的结果。

15

def orNull

如果选项的值非空,则返回该选项的值;如果该选项为空,则返回null。