跳轉到內容

Scala/結構型別

來自華夏公益教科書,開放的書籍,為開放的世界

結構型別,正如維基百科所定義的“結構型別系統(或基於屬性的型別系統)是型別系統的主要類別,其中型別相容性和等價性由型別的結構決定,而不是由其他特徵決定,例如其名稱或宣告位置”。Scala 中的結構型別允許程式碼模組化,用於某些特定情況。例如,如果一種行為在多個類中實現,並且需要透過型別的結構來呼叫這些行為。

這種方法排除了僅僅為了呼叫單個重寫方法而需要抽象類或特性的需求。結構型別不僅增加了語法糖,而且使程式碼更加模組化。

讓我們考慮類 Cat 和 Dog 中的行為“walk”。StrucType 類的 whoIsWalking 接受一個型別引數,該引數指出“接受任何具有 walk 方法並返回字串的物件”型別與變數“c”別名,並在方法中,別名變數可以呼叫“walk”。

class StrucType {
  def whoIsWalking(c:{def walk():String}) = println(c.walk)
}

以下是具有共同“walk”方法的類

class Cat {
  def walk():String = "Cat walking"
}

class Dog {
  def walk():String = "Dog walking"
}

以下是具有 main 方法的類

 object Main {
    def main(args: Array[String]) {

    println("Hello Scala")

    val walkerStruct = new StrucType()

    walkerStruct.whoIsWalking(new Cat())

    walkerStruct.whoIsWalking(new Dog())
  }
}
華夏公益教科書