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