Trait是什么

是Rust对Ad-hoc多态的支持

1、Ad-hoc polymorhism是什么

另一个概念:parametric polymorhism参数化多态

  • 是指为了把同一段代码用在不同的类型上,使用变量类型来替代实际的类型,并按照实际需要传入具体的类型信息来实例化这段代码
  • 保证所有的实例都拥有相同的行为
  • 平时写的模板方法、模板类经常用

    1. template<typename T>
    2. T Add(T a, T b) { return a+b; }

    Ad-hoc polymorhism

  • 根据TAPL中的说法,Ad-hoc和parametric不同,Ad-hoc多态要求多态的值在不同的type下被观测时,展现出不同的行为

  • 例如C++的函数重载,operator+对于字符串的重载语义是字符串拼接,针对整数的重载是求和
  • 因此对于单个函数符号关联了多种类型的不同实现,具体选择哪种实现是根据作用的参数type决定的。这种选择哪种实现的决定(或解析resolution),可能会在编译期或者运行期执行:如果对这种重载的解析是静态的,则在编译期做决定——编译器的多态,静态多态;否则在运行期——运行时多态,OO里常用的多态。运行期多态也有子类型多态subTyping的含义在里面。