Friday, September 28, 2012

Case Classes

  abstract class Dickmacher
  case class Beverage(name: String, cal: Int) extends Dickmacher
  case class Food(name: String, cal: Int) extends Dickmacher
  case class Meal(name: String, food: Food, drink: Beverage) extends Dickmacher
  case class Combo(starter: Dickmacher, main: Dickmacher) extends Dickmacher

  val coke = Beverage("Cola", 50)
  val burger = Food("Big Mac", 400)

  println(coke + " and " + burger)

  val wormup = Meal("Happy Meal", burger, coke)
  val primetime = Combo(wormup, new Combo(Food("Muffin", 200), Beverage("Coffee", 30)))
  //deep toString
  println(wormup)
  println(primetime)

  //deep equals
  println(wormup.drink == Beverage("Cola", 50)) //true
  println(wormup.drink == primetime.main) //false
  
  val fatCombo = new Combo(Food("Muffin", 200), Beverage("Coffee", 30))
  val ohneZuckerCombo = new Combo(Food("Muffin", 200), Beverage("Coffee", 5))
  
  println(fatCombo == ohneZuckerCombo) //false
  println(ohneZuckerCombo == new Combo(Food("Muffin", 200), Beverage("Coffee", 5))) //true

No comments: