• Scala之::的研究


    一个非常细节的问题,简单总结一下。::在Scala里有两种含义。一种是List集合的一个方法,用于把一个元素加入到集合的前面;还有一种表示一个非空的List集合,往往应用于模式匹配中。本文原文出处: http://blog.csdn.net/bluishglc/article/details/55668192 转载请注明出处。

    第一种使用方法: List的一个方法。用于在头部加入新元素

    演示样例代码

    1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3)

    这样的写法在Scala里极为常见,可是会让刚開始学习的人感到困惑:既然::是List的方法,为什么List实例出如今了方法右側。而方法參数出如今了左側。原因是:在Scala里全部以“:”结尾的运算符是右关联的,其它的运算符都是左关联的!

    參考:

    这里写图片描写叙述

    另外一种使用方法:表示一个非空的List,常见于模式匹配

    演示样例代码

    def sum(list: List[Int]): Int = list match {
        case Nil => 1
        case n :: rest => n + sum(rest)
    }

    相似上面的写法在面向集合的模式匹配中非经常见:对于n :: rest这段代码的工作方式的详解是: 它等同于::(n, rest),此处的::实际上是一个case class,在Scala API文档中。关于这个类地址是:http://www.scala-lang.org/api/current/scala/collection/immutable/coloncolon.html

    我们经常使用的List是一个抽象的sealed类,它仅仅有两个实现类:Nil::, 而既然它是一个case calss。那么自己主动实现了unaplly方法的::自然能够顺其自然地參与到模式匹配中,进而就是我们看到的写法n :: rest。它会匹配一个非空集合,结合的第一个元素被提取并赋给变量n, 剩余集合被提取并赋予变量rest.

    參考:

    这里写图片描写叙述

  • 相关阅读:
    Spring
    华为OJ题目:扑克牌大小
    冒泡排序算法总结
    华为OJ题目:刷题
    求立方根
    假硬币问题求解
    SQL in Qt (一)
    Qt3D教程
    (Qt 翻译) QGLAbstractScene
    (Qt 翻译) QGLSceneNode
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7323530.html
Copyright © 2020-2023  润新知