【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

相关推荐
永远不会的CC3 分钟前
浙江华昱欣实习(4月23日~ 4月19日)
后端·学习
无忧智库4 分钟前
跨行业数据要素可信流通体系建设:打破信任壁垒的完整工程方法论(WORD)
大数据·人工智能
mit6.8245 分钟前
NitroGen: AI 自动玩游戏
人工智能
小王毕业啦6 分钟前
2007-2024年 省级-农林牧渔总产值、农业总产值数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
winner88816 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
数据皮皮侠9 分钟前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
AI人工智能+电脑小能手15 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
科研前沿21 分钟前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算
暗夜猎手-大魔王21 分钟前
转载--AI Agent 架构设计:错误处理与容错设计(OpenClaw、Claude Code、Hermes Agent 对比)
人工智能
bzmK1DTbd24 分钟前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则