scala也有类似于java的switch的循环守卫,但更为强大,且好用,下面介绍一下几种用法
var oper = '+'
var num1=10
var num2 = 100
var sum=0
oper match{
case '+'=> sum = num1+num2 ;
//需要添加一下,否则如果没匹配到会报Matcherror
case _=> println("error")
}
println("值为"+sum)
//循环守卫
for(ch<-"+-/*3"){
ch match {
case '+'=> {sum+=num1
println("加法"+sum)
}
case '-'=> {sum-=num1
println("减法"+sum)
}
case '/'=> {sum=sum/num1
println("除法"+sum)
}
case '*'=> {sum+=num1
println("乘法"+sum)}
case mychar =>{
println(mychar)
}
case _=>{
println("无法匹配"+ch)
}
}
}
//匹配返回值
var gh =gl match {
case mychar=> 12+mychar
}
//匹配数据类型 有点鸡肋 case若含有其他数据类型会报错
gh match {
case a: Int=>println("为整形")
case _=> println("无匹配")
}
//匹配array类型
val arrs2 = Array(Array(0), Array(1, 0), Array(0, 1, 0),Array(0,10),
Array(12,3,4), Array(1, 1, 0, 1))
for (arr <- arrs2 ) {
val result = arr match {
case Array(0) => "值为0"
case Array(x, y) => ArrayBuffer(y,x) //Array(y,x).toBuffer //? ArrayB(y,x)
case Array(0, x) => ArrayBuffer( x, 0)
case Array(x,y,z)=> ArrayBuffer(y,z,x)
case _ => "不处理~~"
}
println("res=" + result) //ArrayBuffer(0,1)
}
//匹配list数据类型
for (list <- Array(List(0), List(1, 69), List(88), List(0, 0, 0), List(1, 22,33))) {
val result = list match {
case 0 :: Nil => "0" //
case x :: y :: Nil => x + y //
case 0 :: tail => "0 ..." //
case x :: Nil => x
case x::y::z::Nil => x+y+z
case _ => "something else"
}
println(result)
}
//匹配元组
val arrs2 = Array(Array(0), Array(1, 0), Array(0, 1, 0),Array(0,10),
Array(12,3,4), Array(1, 1, 0, 1))
for (arr <- arrs2 ) {
val result = arr match {
case Array(0) => "值为0"
case Array(x, y) => ArrayBuffer(y,x) //Array(y,x).toBuffer //? ArrayB(y,x)
case Array(0, x) => ArrayBuffer( x, 0)
case Array(x,y,z)=> ArrayBuffer(y,z,x)
case _ => "不处理~~"
}
println("res=" + result) //ArrayBuffer(0,1)
}