专业编程基础技术教程

网站首页 > 基础教程 正文

Rust编程语言的trait对象是不是太简单了

ccvgpt 2024-11-19 02:14:03 基础教程 7 ℃

trait对象是动态大小的类型

一般代码形式是一个可选的dyn关键字后面跟着一组trait

Rust编程语言的trait对象是不是太简单了

其中除了第一个trait

都是autotrait。

而且最多一个生命时间

optout bound (? Sized)是不允许的


trait对象的使用目的

一般在需要延迟绑定的时候

trait对象的一个函数指针

会被从trait对象虚拟表里加载

并分发出去

这就是动态

也就达到了trait对象的方法调用

不像泛型是在编译时期是静态的


main函数里的转换的对象

就是trait对象。


trait对象和结构枚举对象不同

结构和枚举的方法要定义在impl里

trait对象不能包含字段来存数据

只能有方法

它的作用就是用来共同行为的抽象


但是它和泛型参数的结构是不一样的

泛型一次只能用一个具体类型替代

trait对象允许多个类型

比如一个数组里

可以有实现了trait对象的不同的类型

但是泛型参数的类型

只能有具体的一个

可见trait对象可以做到更泛化


trait对象是对象安全的trait

也就是说trait的方法不能返回Self

并且没有泛型参数

这是因为Self是具体自己

泛型参数需要被具体类型替代

而rust trait对象是不知道具体trait对象类型的

也就不知道Self和泛型参数具体类型


你知道的Java,Python,C语言,kotlin语言里有类似功能吗

欢迎关注评论。交流学习。

Tags:

最近发表
标签列表