擴充套件型別類
此示例討論擴充套件下面的型別類。
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 Person
和 object 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) }
}