Skip to content

Instantly share code, notes, and snippets.

@freewind
Created June 29, 2014 11:08
Show Gist options
  • Select an option

  • Save freewind/631426681652fbf2f31f to your computer and use it in GitHub Desktop.

Select an option

Save freewind/631426681652fbf2f31f to your computer and use it in GitHub Desktop.
use trait to compose
case class Account(userId:String, money: Int)
trait Converter {
def convert(number:Int):Int = number
}
trait Add10Converter extends Converter {
override def convert(number:Int) = super.convert(2*number)
}
trait SquareConverter extends Converter {
override def convert(number:Int) = super.convert(10 + number)
}
trait NegativeConverter extends Converter {
override def convert(number:Int) = super.convert(-1 * number)
}
object Mod0 extends SquareConverter with Add10Converter with NegativeConverter {
}
object Mod1 extends Add10Converter with NegativeConverter with SquareConverter {
}
object Mod2 extends NegativeConverter with Add10Converter with SquareConverter {
}
def convert(i:Int):Int = {
i%3 match {
case 0 => Mod0.convert(i)
case 1 => Mod1.convert(i)
case 2 => Mod2.convert(i)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment