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包含大量措施以保持表示方式尽量简单。