维基百科定义的结构化类型
“结构类型系统(或基于属性的类型系统)是类型系统的主要类别,其中类型兼容性和对等性由类型的结构而不是由其他特征(例如其名称或声明的位置)确定”
Scala中的结构类型允许在某些特定情况下实现代码模块化,例如,如果某个行为是在多个类中实现的,则这些行为需要由类型的结构来调用。 这种方法仅出于调用单个重写方法的目的就排除了对抽象类或特征的需求。 结构化类型不仅增加了语法糖,而且使代码更具模块化。
让我们在“猫和狗”类中考虑行为“行走”。 StrucType类的whoIsWalking采用类型参数,该类型参数表示“接受具有方法walk并返回字符串的任何对象”类型的别名为变量'c',并且在该方法中别名变量可以调用'walk'。
class StrucType {
def whoIsWalking(c:{def walk():String}) = println(c.walk)
}
以下是具有commons.class方法的类
class Cat {
def walk():String = 'Cat walking'
}
class Dog {
def walk():String = 'Dog walking'
}
/**
*
* object Main {
def main(args:Array[String]) {
println('Hello Scala')
val walkerStruct = new StrucType();
walkerStruct.whoIsWalking(new Cat());
walkerStruct.whoIsWalking(new Dog());
}
}
*/
也可以考虑使用结构化类型来重构您的下一个策略模式实施。 Iam计划在我的下一篇文章中解释它们,敬请期待!!!!
参考:来自我们的JCG合作伙伴 Prasanna Kumar在Scala博客上的Prassee中在Scala中进行的 结构(或)类型安全鸭子输入 。
翻译自: https://www.javacodegeeks.com/2013/01/structural-or-type-safe-duck-typing-in-scala.html