【rCore OS 开源操作系统】Rust trait 特性快速上手

trait 特性快速上手

什么是 trait

一些权威资料的描述是这样的:

Note: Traits are similar to a feature often called interfaces in other languages, although with some differences.

也就是说trait (特性)类似于其他语言中通常称为interfaces的功能,但存在一些差异。

OK,那作为初学者我就不求甚解,就先理解为它可以当 interface 来使用就好了

那学过其他语言,我们知道 interface 是干什么的呢?

就是定义某个类型,有那些属性、方法

由于 Rust 是超级强类型的语言,约束比较多,trait 只允许定义方法

所以 trait 也可以这么用:

rust 复制代码
// 这样定义一个叫做 AppendBar 的特性
trait AppendBar {
    fn append_bar(self) -> Self;
}

实现 trait

然后就是所谓的跟interface不一样之处了------如何把它和类型关联呢?

不过其实也就是语法不太一样

rust 复制代码
// 给 String 类型实现这个特性
impl AppendBar for String {
    fn append_bar(self) -> Self {
        self + "Bar"
    }
}

使用 trait

这样以来,之后所有String类型的变量,都可以调用 append_bar 方法:

rust 复制代码
let s = String::from("Foo");
let s = s.append_bar();

配合范型使用

如果我们无法准确描述所需要的类型,但是我们知道它必须要具备一个或者几个trait,那就可以这么描述这个类型:

rust 复制代码
fn some_func<T: SomeTrait + OtherTrait>(item: T) -> bool {
    item.some_function() && item.other_function()
}

这样就用范型描述了一个同时满足SomeTraitOtherTrait的类型T

相关推荐
计算机-秋大田1 分钟前
基于微信小程序的校园失物招领系统设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
綦枫Maple2 分钟前
Spring Boot(6)解决ruoyi框架连续快速发送post请求时,弹出“数据正在处理,请勿重复提交”提醒的问题
java·spring boot·后端
人才程序员25 分钟前
【C++拓展】vs2022使用SQlite3
c语言·开发语言·数据库·c++·qt·ui·sqlite
AI趋势预见29 分钟前
使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比
人工智能·深度学习·神经网络·语言模型·金融
码至终章38 分钟前
kafka常用目录文件解析
java·分布式·后端·kafka·mq
Mr.Demo.42 分钟前
[Spring] Nacos详解
java·后端·spring·微服务·springcloud
梁雨珈1 小时前
PL/SQL语言的图形用户界面
开发语言·后端·golang
Zda天天爱打卡1 小时前
【机器学习实战中阶】使用Python和OpenCV进行手语识别
人工智能·python·深度学习·opencv·机器学习
励志的小陈1 小时前
C语言-----扫雷游戏
c语言·开发语言·游戏
martian6651 小时前
第19篇:python高级编程进阶:使用Flask进行Web开发
开发语言·python