擴充套件型別類

此示例討論擴充套件下面的型別類。

trait Show[A] {
  def show: String
}

要建立一個控制的類 (並使用 Scala 編寫),請擴充套件型別類,向其伴隨物件新增隱式。讓我們展示如何從這個例子中獲取 Person 類來擴充套件 Show

class Person(val fullName: String) {    
  def this(firstName: String, lastName: String) = this(s"$firstName $lastName")
}

我們可以通過向 Person 的伴隨物件新增一個隱式來使這個類擴充套件 Show

object Person {
  implicit val personShow: Show[Person] = new Show {
    def show(p: Person): String = s"Person(${p.fullname})"
  }
}

伴隨物件必須與該檔案位於同一檔案中,因此你需要在同一檔案中同時使用 class Personobject Person

要建立一個你不控制或不用​​Scala 編寫的類,請擴充套件型別類,向型別類的伴隨物件新增一個隱式,如 Simple Type Class 示例所示。

如果你既不控制類也不控制型別類,那麼在任何地方建立一個隱含的,並且 import 它。在 Simple Type Class 示例中使用 log 方法 :

object MyShow {
  implicit val personShow: Show[Person] = new Show {
    def show(p: Person): String = s"Person(${p.fullname})"
  }
}

def logPeople(persons: Person*): Unit = {
  import MyShow.personShow
  persons foreach { p => log(p) }
}