当前位置: 首页 > article >正文

【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 也可以这么用:

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

实现 trait

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

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

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

使用 trait

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

let s = String::from("Foo");
let s = s.append_bar();

配合范型使用

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

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

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


http://www.kler.cn/news/362993.html

相关文章:

  • tracert和ping的区别
  • 理工科考研想考计算机,湖南大学、重大、哈工大威海、山东大学,该如何选择?
  • 干货|基于React和xlsx库导出表格数据到excel(前端操作)
  • spring boot 集成 dynamic-datasource-spring-boot-starter
  • JavaScript 中怎么判断前端各种运行环境
  • 【Unity】Unity中调用手机的震动功能 包括安卓和IOS
  • tesseract-ocr 文本识别开发指南
  • Redis --- 第八讲 --- 关于主从复制哨兵
  • 你心念的民宿乡村田园短时间内实现不了,此类可视化大屏唾手可得
  • 用C#实现互斥操作
  • Java爬虫之使用Selenium WebDriver 爬取数据
  • pycharm中鼠标选择文本会自动复制
  • @RequestBody的详解和使用
  • 怎么为pdf文件设置密码?几种PDF文件设置密码的方法推荐
  • 房屋租赁管理系统|基于java和小程序的房屋租赁管理系统小程序设计与实现(源码+数据库+文档)
  • 探索云计算:AWS、Azure、GCP云服务提供商详解
  • 2024java高频面试之JVM-第二弹
  • Spring boot快速集成开发
  • ABB防爆伺服电机HX系列 危险工业环境中的安全卫士
  • 「C/C++」C++ STL容器库 之 std::vector动态数组容器
  • 特斯拉Optimus:展望智能生活新篇章
  • 立仪科技:光谱共焦传感器精准测量玻璃
  • Spring框架如何高效的使用线程池
  • DEPT:DECOMPOSED PROMPT TUNING FOR PARAMETER-EFFICIENT FINE-TUNING
  • 【Python学习】Python基础,对于库和框架的讲解(优点缺点)小白必备的!!!
  • AST 技术学习