risc-v中文社区

 找回密码
 立即注册
查看: 1869|回复: 1

[原创] case class和case object模式匹配实验

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-10-18 16:07:43 | 显示全部楼层 |阅读模式


/**
  * @Author Joe_Liang
  * @Date 2021/10/18 15:59
  * @Version 1.0
  */
case class SubmitTask(id:String,name:String)
case class HeartBeat(time:Long)
case object CheckTimeOutTask
object caseTest {
  def main(args: Array[String]): Unit = {
    val arr = Array(CheckTimeOutTask,SubmitTask("123","zs"),HeartBeat(12333333))
    for(i <- 0 until 10) {
      arr(Random.nextInt(arr.length)) match {
        case SubmitTask(id,name) => println(s"${id} ${name}")
        case HeartBeat(time) => println(time)
        case CheckTimeOutTask => println("checktimeouttask")
      }
    }
  }
}
显示如下:
123 zs
12333333
12333333
checktimeouttask
12333333
12333333
checktimeouttask
123 zs
checktimeouttask
123 zs


回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-10-18 16:16:06 | 显示全部楼层
其实arr的类型是Array[Product with Serializable]。如果用下面的代码:
    val st = SubmitTask("123","lisi")
    val hb = HeartBeat(12345)
    st match {
      case HeartBeat(time) => println(time)
      case HeartBeat(time) => println(time)
      case SubmitTask(id,name) => println(id + name)
    }
则出现编译错误:
Error24, 12) constructor cannot be instantiated to expected type;
found   : HeartBeat
required: SubmitTask
这里出现错误是因为类型不同,匹配异常。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-26 20:57 , Processed in 0.028390 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表