美文网首页
Scala编程基础21:Scala选项

Scala编程基础21:Scala选项

作者: 金字塔下的小蜗牛 | 来源:发表于2020-04-09 08:14 被阅读0次

    Scala Option(选项)类型用于表示一个值是可选的(有值或者无值)。Option[T]是一个类型为T的可选值的容器:如果值存在,Option[T]就是一个Some[T];如果不存在,Option[T]就是对象None。

    1.Option的定义和使用

    下面是一个定义Option的示例:只输出变量的类型

    object Test1 {
        def main(args: Array[String]) {
            val myMap:Map[String,String]=Map("key1"->"value1");
            val value1:Option[String]=myMap.get("key1");
            val value2:Option[String]=myMap.get("key2");
            println(value1);
            println(value2);
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Test>scalac Test1.scala
    E:\Test>scala Test1
    Some(value1)
    None

    在上面的代码中,myMap是一个String到String的HashMap,get()方法返回的是Option[String]类型的值。Scala使用Option[String]来告诉你:我会想办法回传一个String的值给你,但是也可能没有String给你。比如myMap里面没有key2的数据,get()方法返回的是None。Option类型有两个子类型:Some和None。当返回值为Some类型时表示成功回传了一个String,可以通过get()拿到该String;如果返回的是None,表示没有字符串可以给你。

    下面是另一个示例:输出值的类型

    object Test2 {
        def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            println("colors.get(\"red\") = "+colors.get("red"));
            println("colors.get(\"white\") = "+colors.get("white"));
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Test>scalac Test2.scala
    E:\Test>scala Test2
    colors.get("red") = Some(#FF0000)
    colors.get("white") = None

    也可以通过模式匹配来输出匹配的值,请看下面的示例:只输出值

    object Test3 {
        def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            println("show(colors.get(\"red\")) = "+show(colors.get("red")));
            println("show(colors.get(\"white\")) = "+show(colors.get("white")));
        }
        def show(x:Option[String]) = x match {
            case Some(s) => s;
            case None => "?";
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Test>scalac Test3.scala
    E:\Test>scala Test3
    show(colors.get("red")) = #FF0000
    show(colors.get("white")) = ?

    2.Option的getOrElse()方法

    可以使用Option的getOrElse()方法来获取元组中存在的元素或者使用其默认值,示例如下:

    object Test4 {
        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));
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Test>scalac Test4.scala
    E:\Test>scala Test4
    a.getOrElse(0) = 5
    b.getOrElse(10) = 10

    3.Option的isEmpty()方法

    可以使用isEmpty()方法来检测元组中的元素是否为None,示例如下:

    object Test5 {
        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);
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Test>scalac Test5.scala
    E:\Test>scala Test5
    a.isEmpty = false
    b.isEmpty = true

    4.Option的常用方法

    下面列出了Scala Option类型中常用的方法:

    def get: A
    获取可选值

    def isEmpty: Boolean
    检测可选类型值是否为 None,是的话返回 true,否则返回 false

    def productArity: Int
    返回元素个数, A(x_1, …, x_k), 返回 k

    def productElement(n: Int): Any
    获取指定的可选项,以 0 为起始。即 A(x_1, …, x_k), 返回 x_(n+1) , 0 < n < k.

    def exists(p: (A) => Boolean): Boolean
    如果可选项中指定条件的元素存在且不为 None 返回 true,否则返回 false。

    def filter(p: (A) => Boolean): Option[A]
    如果选项包含有值,而且传递给 filter 的条件函数返回 true, filter 会返回 Some 实例。 否则,返回值为 None 。

    def filterNot(p: (A) => Boolean): Option[A]
    如果选项包含有值,而且传递给 filter 的条件函数返回 false, filter 会返回 Some 实例。 否则,返回值为 None 。

    def flatMap[B](f: (A) => Option[B]): Option[B]
    如果选项包含有值,则传递给函数 f 处理后返回,否则返回 None

    def foreach[U](f: (A) => U): Unit
    如果选项包含有值,则将每个值传递给函数 f, 否则不处理。

    def getOrElse[B >: A](default: => B): B
    如果选项包含有值,返回选项值,否则返回设定的默认值。

    def isDefined: Boolean
    如果可选值是 Some 的实例返回 true,否则返回 false。

    def iterator: Iterator[A]
    如果选项包含有值,迭代出可选值。如果可选值为空则返回空迭代器。

    def map[B](f: (A) => B): Option[B]
    如果选项包含有值, 返回由函数 f 处理后的 Some,否则返回 None

    def orElse[B >: A](alternative: => Option[B]): Option[B]
    如果一个 Option 是 None , orElse 方法会返回传名参数的值,否则,就直接返回这个 Option。

    def orNull
    如果选项包含有值返回选项值,否则返回 null。

    相关文章

      网友评论

          本文标题:Scala编程基础21:Scala选项

          本文链接:https://www.haomeiwen.com/subject/pgskdhtx.html