【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

相关推荐
艾莉丝努力练剑几秒前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
AndrewHZ13 分钟前
【图像处理基石】如何对遥感图像进行实例分割?
图像处理·人工智能·python·大模型·实例分割·detectron2·遥感图像分割
AQin101216 分钟前
IP 🆚 MAC,你分得清吗?
后端·网络协议
froginwe1117 分钟前
WebPages PHP:深入解析PHP在网页开发中的应用
开发语言
天涯学馆37 分钟前
Solidity 中的高级模式匹配:提升代码的可读性和可维护性
后端·区块链·solidity
CodeShare41 分钟前
某中心将举办机器学习峰会
人工智能·机器学习·数据科学
R-G-B1 小时前
【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】
开发语言·c#·c# winform·表格布局器·tablelayoutpane
那就摆吧1 小时前
U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
人工智能·神经网络·cnn·u-net·医学图像
深度学习实战训练营1 小时前
中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
人工智能·音视频·语音识别
郝学胜-神的一滴1 小时前
Spring Boot Actuator 保姆级教程
java·开发语言·spring boot·后端·程序人生