case class与case object实战

本文介绍Scala中的case class和case object的使用方法,并通过具体案例演示它们如何简化消息传递与模式匹配。文章还探讨了case class与case object的区别,并提供了一个嵌套case的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献
scala 深入浅出实战经典 . 王家林

场景
case class与case object的基本使用与嵌套case

实验

package com.scode.scala

/**
 * author: Ivy Peng
 * function: case class 与 case object学习
 * date:2016/03/20 12.14
 * sum:
 * 1、作用:语言级别的优化,方便传递消息与模式匹配
 * 2、语法:case class className(property:proType,..)其中property默认是 val的
 * 3、case object : 需要一个共享的全球唯一的对象时用
 * 4、case 嵌套学习
 */
abstract class Person
case class Student(age:Int) extends Person
case class Worker(age:Int,salary:Double) extends Person
case object Shared extends Person

abstract class Item
case class Book(des:String,price:Double) extends Item
case class Bundle(des:String,price:Double,items:Item*) extends Item

object CaseLearn
{
  def main(args:Array[String]):Unit =
  {
    def caseOps(person:Person) = person match
    {
      //这里会从person中汲取出 age并复制给 Student.age
      case Student(age)=> println("I'm "+age +" year old!")
      case Worker(_,salary)=> println("I'm a worker with salary of "+salary)
      case Shared => println("No property")
    }

    caseOps(Student(19))
    caseOps(Shared)

    val worker = Worker(10,1000.2)
    val worker2 = worker.copy(salary=10)

    def recursiveCase(item:Item) = item match
    {
      case Bundle(_,_,art@Book(_,_),rest@ _*)=> println("给当前实例Book一个引用名字 art :"+art.des)
      case Bundle(_,_,Book(desc,_),_*) => println("Book with des:"+desc)
      case _ => println("Oops")
    }

    recursiveCase(
        Bundle(
            "Spark 1.0",30.0,
            Book("Scala,yes",18.0),
            Bundle("",28.0,Book("java",10),Book("c++",20))
              )
                 )
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值