模式匹配

1.第一种方式,类似Java的switch case:
 var chi = '-'
    var sign = 0 //标识符  如果 chi 为 ‘-’ 则sign赋值为-1

    chi match {
      case '+' => sign = 1
      case '-' => sign = -1
      case _ => sign=0 // _ 表示其他的值
    }
    println(sign)
2.Scala 的守卫:匹配某种类型的所有值 case _ if
举例 匹配所有的数字,如果ch2是一个数字,则digit赋值为ch2

var ch2 = '6'
var digit : Int = -1

ch2 match {
  case '+' => println("这是一个加号")
  case '-' => println("这是一个减号")
  case _ if Character.isDigit(ch2) => digit = Character.digit(ch2,10)// 10 表示 10进制
  case _ => println("其他")
}

println(digit)
3.在模式匹配中使用变量
 var mystr = "Hello World"
    //取出某个字符,赋给模式匹配的变量
    mystr(7) match {
      case '+' => println("这是一个加号")
      case '-' => println("这是一个减号")
      case ch => println(ch)//case语句中使用变量 ch代表传递进来的字符
    }
4.匹配类型:相当于java中的instanceof

用法: case x : Int =>

 var v4 : Any = 100 // 虽然v4的类型在定义的时候是Anybody,但是最终 v4 是一个整数
    v4 match {
      case x : Int => println("这是一个整数")
      case s : String => println("这是一个字符串")
      case _ => println("其他类型")
    }
5.匹配数组和列表
var myArray = Array(1,2,3)
    myArray match {
      case Array(0) => println("数组中只有一个0")
      case Array(x,y) => println("数组中包含两个元素")
      case Array(x,y,z) => println("数组中包含3个元素")
      case Array(x,_*) => println("这是一个数组,包含多个元素")
    }

    var myList = List(1,2,3,4,5,6)
    myList match {
      case List(0) => println("列表中只有一个0")
      case List(x,y) => println("列表中包含两个元素,和是: " + (x+y))
      case List(x,y,z) => println("列表中包含3个元素,和是: "+ (x+y+z))
      case List(x,_*) => println("这是一个列表,包含多个元素,和是: " + myList.sum)
    }
Scala中几种类型的对比
  *Any 表示任意类型 相当于java中的Object
  * Unit 表示无值,相当于 void
  * Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型
  * Null 是所有应用类型的子类,值为null
  *
  * 特殊的类型:
  * Option : Scala Option(选项)类型用来表示一个值是可选的(有值或者无值)
  * Some :如果值存在,Option 就是 Some
  * None : 如果值不存在,Option 就是 None

你可能感兴趣的:(模式匹配)