Skip to content

Instantly share code, notes, and snippets.

@fkautz
Last active December 18, 2015 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fkautz/5846291 to your computer and use it in GitHub Desktop.
Save fkautz/5846291 to your computer and use it in GitHub Desktop.
Simple calculator using dynamic dispatch.
package dynamic
abstract class Expression {
def eval:Double = ???
}
case class Value(val value: Double) extends Expression {
override def eval = value
}
case class Add(val exp1: Expression, val exp2: Expression) extends Expression {
override def eval = exp1.eval + exp2.eval
}
case class Subtract(val exp1: Expression, val exp2: Expression) extends Expression {
override def eval = exp1.eval - exp2.eval
}
case class Multiply(val exp1: Expression, val exp2: Expression) extends Expression {
override def eval = exp1.eval * exp2.eval
}
case class Divide(val exp1: Expression, val exp2: Expression) extends Expression {
override def eval = exp1.eval / exp2.eval
}
// third party users can extend
object ScalaWithStyle {
def main(args:Array[String]) {
val result = Multiply(Add(Value(1), Value(2)), Add(Value(3), Value(4))).eval
println(result)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment