Scala中的类型类 - 一个最小的自包含示例

时间:2015-04-04 21:37:10

标签: scala

我查看了类型类场景的示例以及如何在scala中模仿这个Haskell-ish概念,例如在http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html。我认为他们所涉及的内容太多,而且叙述性的负担也超出了他们的预期。您能否使用类型类而不是继承和mixins为多态性提供权威的 minimal 示例?

谢谢!

1 个答案:

答案 0 :(得分:6)

// type class
trait Show[A] { def show(x: A): String }

// usage
def greet[A](x: A)(implicit sh: Show[A]) = s"Hello ${sh.show(x)}"

// example instance
implicit object ShowDouble extends Show[Double] {
  def show(x: Double) = f"$x%1.3f" // format with three digits
}

greet(math.Pi)  // "Hello 3.142"