zoukankan      html  css  js  c++  java
  • 快学Scala(14)--模式匹配和样例类

    更好的switch

      def main(args: Array[String]): Unit = {
        var sign: Int = 0
        val ch: Char = '+'
        val color = Color.BLACK
        sign = ch match {
          case '+' => 1
          case '-' => -1
          case _ => 0
        }
        color match {
          case Color.RED => ;
          case Color.BLACK => ;
          case _ => ;
        }
        println(sign)
      }
    

      

    守卫

    case _ if Charactrt.isDigit(ch) => digit = Character.digit(ch, 10)

    模式匹配

    obj match {
      case x: Int => x
      case s: String => Integer.parseInt(s)
      case _: BigInt => Int.MaxValue
      case _ => 0
    }

      注:匹配发生在运行期,Java虚拟机中泛型的类型信息是被擦掉的。因此,不能用类型来匹配特定的Map类型。但对于数组而言元素的类型是完好的。

    匹配数组、列表和元组

      def main(args: Array[String]): Unit = {
        val arr = Array(0)
        var result = arr match {
          case Array(0) => "0"       //匹配一个包含且只包含0的数组
          case Array(x, y) => x+""+y   //匹配任何带有两个元素的数组
          case Array(0, _*) => "0 ..."  //匹配任何以0开头的数组
          case _=> "something else"
        }
        println(result)
      }
    

      

      def main(args: Array[String]): Unit = {
        val lst = List{1,2,3}
        var result = lst match {
          case 0 :: Nil => "0"
          case x :: y :: Nil => x + "" + y
          case 0 :: tail => "0 ..."
          case _ => "something else"
        }
      }
    

      

      def main(args: Array[String]): Unit = {
        val pair = Tuple2(0, 2)
        val result = pair match {
          case (0, _) => "0 ..."
          case (y, 0) => y + "0"
          case _ => "neither is 0"
        }
        println(result)
      }
    

      

    中置表示法

    amt match { case a Currency u => ...} //等同于case Currency(a, u)

    偏函数

      def main(args: Array[String]): Unit = {
        val result = "-3+4".collect {case '-' => -1; case '+' => 1}
        println(result)  //Vector(-1, 1)
      }
    

      apply方法从匹配到的模式计算函数值,而isDefinedAt方法在输入至少匹配其中一个模式时返回TRUE。

  • 相关阅读:
    linux中的 tar命令的 -C 参数,以及其它一些参数
    dockerfile 介绍
    linux安装mysql后root无法登录
    centos搭建本地yum源,
    centos7下载自定义仓库的镜像设置方法
    QT TCP文件上传服务器
    QT UDP聊天小程序
    QT 网络编程三(TCP版)
    QT 网络编程二(UDP版本)
    QT 网络编程一
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6672440.html
Copyright © 2011-2022 走看看