scala> abstract class Subject() defined class Subject scala> case class History(grade: String, mark:Int) extends Subject defined class History scala> case class Math(grade: String, mark:Int) extends Subject defined class Math scala> case class Geo(grade: String, mark:Int) extends Subject defined class Geo scala> case class Science(grade: String, mark:Int) extends Subject defined class Science scala> scala> //////////////////////////////////////////////////////////////// scala> // Partial Function : Example... #327 scala> //////////////////////////////////////////////////////////////// scala> val fn1: Subject => Unit = { | // A Partial function is a sequence of 'case's | case History(_, _) => println("History...") | case Math(_, mark) => println("Math...") | case Geo(_, mark) => println("Geo...") | } fn1: Subject => Unit = <function1> scala> scala> fn1(History("1st", 70)) History... scala> fn1(Science("1st", 70)) scala.MatchError: Science(1st,70) (of class Science) at $anonfun$1.apply(<console>:14) at $anonfun$1.apply(<console>:14) at .<init>(<console>:18) scala> //////////////////////////////////////////////////////////////// scala> // Adding isDefinedAt() for Partial Function #330 scala> //////////////////////////////////////////////////////////////// scala> val fn1: PartialFunction[Subject, Unit] = { | case History(_, _) => println("History...") | case Math(_, mark) => println("Math...") | case Geo(_, mark) => println("Geo...") | } fn1: PartialFunction[Subject,Unit] = <function1> scala> scala> fn1(History("1st", 70)) History... scala> fn1.isDefinedAt(Science("1st", 70)) res9: Boolean = false