trait在rust语言里扮演抽象接口的角色,它的成员可以是常量,类型,非异步非常量函数。你可以选择实现函数,给常量初始化。
trait分为安全和非安全的。安全的trait有很多特性,比如:
一个trait的所有父trait必须是安全的,这很好理解,不过还没有深入到安全的本质。
Self: Sized一定不要用来约束trait,以免使成有固定大小空间可分配的。
不能在trait成员里使用三大成员类型的常量成员,因为它的空间大小也是编译时固定了。
成员函数必须是可分派的,需具有以下特点:
任何参数不能有Self类型。
上面的例子就是用Self做参数,这是安全对象pig不应该有的特点,因为它占用空间大小是已知的。
函数必须有&self参数,而方法不需要。
方法不带泛型参数,生命时间参数是可以的。
参数类型可以是引用的Self类型。
引用的Self类型也能够用于Box, Rc, Arc, Pin泛型但是Pin泛型不能是Self类型只能是引用Self,Box, Rc,Arc泛型。
你知道的Java,Python,C语言,golang语言有类似功能吗
好了下次再深入了解,欢迎关注。