35.scala编程思想笔记——基于case类的模式匹配

145 阅读1分钟

35.scala编程思想笔记——基于case类的模式匹配

欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…
源码下载连接请见第一篇笔记。\

使用case类进行模式识别时,match表达式甚至可以抽取类的参数域。

         例如:

import com.atomicscala.AtomicTest._

 

case class Passenger(

  first:String,last:String)

case class Train(

 travelers:Vector[Passenger],

  line:String)

case class Bus(

 passengers:Vector[Passenger],

  capacity:Int)

 

def travel(transport:Any):String = {

  transportmatch {

    caseTrain(travelers, line) =>

     s"Train line $line $travelers"

    caseBus(travelers, seats) =>

     s"Bus size $seats $travelers"

    casePassenger => "Walking along"

    case what=> s"$what is in limbo!"

  }

}

 

val travelers = Vector(

 Passenger("Harvey", "Rabbit"),

 Passenger("Dorothy", "Gale"))

 

val trip = Vector(

 Train(travelers, "Reading"),

 Bus(travelers, 100))

 

travel(trip(0)) is "Train line Reading " +

 "Vector(Passenger(Harvey,Rabbit), " +

 "Passenger(Dorothy,Gale))"

travel(trip(1)) is "Bus size 100 " +

 "Vector(Passenger(Harvey,Rabbit), " +

 "Passenger(Dorothy,Gale))"

其中标识符what会匹配上面各个case表达式未匹配的任何其他事物。

此例,说明构建表示系统的模型是如此轻松,此外Scala包含大量措施以保持表示方式尽量简单。