Scala 模式匹配与样例类


			可以匹配的类型:
			1)匹配内容
				//这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑
				//类比法 JAVA : switch case
				object CaseDemo01 extends App {
				  val arr = Array("tom", "mike", "hello")
				  val i = Random.nextInt(arr.length)
				  println(i)
				  val name = arr(i)
				  println(name)

				  //这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑
				  //类比法 JAVA : switch case
				  name match {
					case "tom" => println("我是tom...")
					case "mike" => {
					  println("我是mike'...")
					}
					case _ => println("真不知道你们在说什么...")
				  }
				}
			2)匹配类型
				object CaseDemo02 extends App {
				  //定义一个数组
				  val arr: Array[Any] = Array("hello123", 1, -2.0, 2.0, CaseDemo02, 2L)

				  //取出一个元素
				  val elem = arr(5)
				  println(elem)

				  //这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑

				  elem match {
					case x: Int => println("Int " + x)
					case y: Double if (y <= 0) => println("Double " + y)
					case z: String => println("String " + z)
					case w: Long => println("long " + w)
					case CaseDemo02 => {
					  val c = CaseDemo02
					  println(c)
					  println("case demo 2") //throw new Exception("not match exception")
					}
					case _ => { //表示什么都没匹配上,相当于switch中的default
					  println("no")
					  println("default")
					}
				  }
				}
			3)匹配Array
				  println("******************匹配数组****************************")
				  val arr = Array(1, 1, 7, 0)
				  arr match {
					case Array(0, 2, x, y) => println(x + " " + y)
					case Array(1, 1, 7, 0) => println("0 ...")
					case Array(1, 1, 7, y) => println("only 0 " + y)
					case _ => println("something else")
				  }
			4)匹配元组
				println("******************匹配元组****************************")
				  val tup = (1, 3, 8)
				  tup match {
					case (1, x, y) => println(s"hello 123 $x , $y")
					case (_, w, 5) => println(s"w:${w}")
					case _ => println("else")
				  }
1)简单来说,scala的class,就是在普通类定义前加个case关键字,然后你就可以对这些类进行模式匹配
				case class带来的最大的好处就是支持模式匹配
				//样例类,模式匹配,封装数据(多例),不用new即可创建实例
				case class SubmitTask(id: String, name: String)

				case class HeartBeat(time: Long)

				//样例对象,模式匹配(单例)
				case object CheckTimeOutTask

				/**
				  * 样例类demo
				  * 简单来说,scala的class,就是在普通类定义前加个case关键字,然后你就可以对这些类进行模式匹配
				  * case class带来的最大的好处就是支持模式匹配
				  */
				object CaseDemo04 extends App {

				  val arr = Array(CheckTimeOutTask, new HeartBeat(123), HeartBeat(88888), new HeartBeat(666), SubmitTask("0001", "task-0001"))
				  val a = arr(1)
				  println(a)

				  a match {
					case SubmitTask(id, name) => {
					  println(s"$id, $name")
					}
					case HeartBeat(time) => {
					  println(time)
					}
					case CheckTimeOutTask => {
					  println("check")
					}
				  }
				}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值