跳转到内容

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())
  }
}
华夏公益教科书