case class与case object实战

参考文献
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))
              )
                 )
  }
}

你可能感兴趣的:(scala,语言)