Last active
December 18, 2015 21:19
-
-
Save fkautz/5846210 to your computer and use it in GitHub Desktop.
Example of compiler discovering and warning missing cases in a simple calculator. sealed abstract class Expression is required for the warning message to appear. Sealed will require all direct subclasses (but not subclasses of subclasses) to be defined within the same file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed abstract class Expression | |
case class Add(val exp1:Expression, val exp2:Expression) extends Expression | |
case class Subtract(val exp1:Expression, val exp2:Expression) extends Expression | |
case class Multiply(val exp1:Expression, val exp2:Expression) extends Expression | |
case class Divide(val exp1:Expression, val exp2:Expression) extends Expression | |
case class Value(value:Double) extends Expression | |
object Calculator { | |
def calculate(expression:Expression):Double = { | |
expression match { | |
case Value(value) => value | |
case Add(exp1, exp2) => calculate(exp1) + calculate(exp2) | |
case Subtract(exp1, exp2) => calculate(exp1) - calculate(exp2) | |
case Multiply(exp1, exp2) => calculate(exp1) * calculate(exp2) | |
// case Divide(exp1, exp2) => calculate(exp1) / calculate(exp2) | |
} | |
} | |
} | |
object ScalaWithStyle { | |
def main(args:Array[String]) { | |
val result = Calculator.calculate( | |
Multiply( | |
Add(Value(1), Value(2)), | |
Add(Value(3), Value(4)))) | |
println(result) // result is 21.0 | |
} | |
} | |
Warning: | |
Description Resource Path Location Type | |
match may not be exhaustive. It would fail on the following input: Divide(_, _) ScalaWithStyle.scala /ScalaWithStyle/src line 11 Scala Problem |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment