scala模式匹配

package scaladay02.com.aura
//模式匹配样例类模式匹配是Scala中非常强大的一种功能。模式匹配,其实类似于Java中的swtich case语法,即对一个值进行条件判断,然后针对不同的输入条件,进行结果处理。
//Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case class进行匹配、甚至对有值或没值(Option)进行匹配。

object MoShiTest {
def main(args: Array[String]): Unit = {
FuOn
}
//定义方法1
//模式匹配类似于java中的switch case
def FuOn(): Unit ={
// var sign=0
var ch:Char=‘1’
//match关键字
// val res=ch match{
// case ‘+’=>sign=1
// case ‘-’=>sign=1
// //判断此字符是否为数字
// case _ if Character.isDigit(ch)=>3
// //当以上条件都不成立则执行这个条件相当于default
// case _ =>sign=0
//
// }
// println(s"res=$res")

val ret1= ch match{
  case '+' => 1
  case '-' => 2
  case '/'=> 3
  **case _ => 4**
}
println(s"ret1:=$ret1")

}
}
注意//在scala中,如果所有的case都没有匹配到对应的值,会报错scala.MatchError:

守卫
package scaladay02.com.aura

object Guard {
def main(args: Array[String]): Unit = {
val arr=Array(1,2,3,4,5,6)
val res=for(i<- arr)yield {if (i%2==0)i}//yeild相当于重新开辟一个缓存区来存放条件执行的结果集这就是守卫
println( arr.mkString(","))
}
}

模式中的变量
package scaladay02.com.aura
//模式中的变量如果在case关键字后跟着一个变量名,那么匹配的表达式会被赋值给那个变量。case 是这个特性的一个特殊情况,变量名是**.**
object ModelVariables {
def main(args: Array[String]): Unit = {
//遍历每次输出一个字符
“hello world”.foreach(ch=>println(
ch match {
case ’ '=>“space”
//判断是否为字符
case a=>“Char:”+a
}
))
}
}

package scaladay02.com.aura

//类型匹配是模式匹配中使用最广泛的一种方式如果匹配成功,就把x赋值给对应的类型变量
object TypeMatching {
def main(args: Array[String]): Unit = {
// println(typeOps(“111112122”))
def typeOps(x:Any):Int={
//使用match来进行比对然后找到对应的项
val result=x match {
//运用对应类型的特有api进行将我们输入的转换成我们
// 需要的然后输出
case i:Int=>i
case s:String=>Integer.parseInt(s)
case z:scala.math.BigInt=>Int.MaxValue
case c:Char=>c.toInt
//当所有条件都不存在时执行此项命令
case _ =>0

  }
  result
}
println(typeOps("122142135"))
//println(typeOps(true))

}
}

package scaladay02.com.aura
//模式匹配进行数组、列表和元组的匹配
object PatternMatching {
def main(args: Array[String]): Unit = {
val arr=ArrayInt
arr match{
//匹配两个参数的数组
case Array(x,y)=>{
println(s"x= x , y = x,y= x,y=y")
}
//匹配以0开头的任意长的数组
case Array(0,_*)=>{
println(“0,000”)
}
case _=>{
println(“else”)
}
}
//定义一个元组Tuple4表示是有4个元素的数组
val tuple=new Tuple4(“春”,“夏”,“秋”,“冬”)
//进行一个对应
val (spring,summer,autumn,winter)=(“春”,“夏”,“秋”,“冬”)
println(spring)
}
}

package scaladay02.com.aura

//样例类

object CaseClass {
def main(args: Array[String]): Unit = {
abstract class Expr//表达式
case class Var(name:String) extends Expr //变量
case class Number(num:Double) extends Expr // Number
//operator表示逻辑处理比如+,- * / 等 arg表示表达式例如上面的VarNumber等
case class UnOP(operator:String,arg:Expr)extends Expr //a++,b–

case class BinOp(operator:String,left:Expr,right: Expr) extends Expr

def simplifyTop(expr:Expr):Expr=expr match {
    
  case UnOP ("-", UnOP ("-",e))=>e
  case  BinOp("+",e,Number(0))=>e
  case  BinOp("*",e,Number(1))=>e
  case  Var(name)=>Var(name)
  case  _ =>expr

}
println(simplifyTop(new UnOP("-",new Number(2.0))))
  println(simplifyTop(Var("jack")))

}

}
结果:UnOP(-,Number(2.0))
Var(jack)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值