Wednesday, October 5, 2016

Partial Function, isDefinedAt() : Example...

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