Rust编程语言入门教程(三)-trait

文章目录

  • Rust编程语言入门教程(三)-trait
    • 什么是 trait?
    • trait使用举例

Rust编程语言入门教程(三)-trait

什么是 trait?

trait 是 Rust 中的接口,它定义了类型使用这个接口的行为。你可以类比到自己熟悉的语言中理解,trait 对于 Rust 而言,相当于 interface 之于 Java。

在开发复杂系统的时候,我们常常会强调接口和实现要分离。因为这是一种良好的设计习惯,它把调用者和实现者隔离开,双方只要按照接口开发,彼此就可以不受对方内部改动的影响。

trait 就是这样。它可以把数据结构中的行为单独抽取出来,使其可以在多个类型之间共享;也可以作为约束,在泛型编程中,限制参数化类型必须符合它规定的行为。

如果你把 trait 类比为父类,实现 trait 的类型类比为子类,那么缺省实现的方法就相当于子类中可以重载但不是必须重载的方法。

在 Rust 中,“trait” 是一个关键字,用于定义抽象的类型行为和方法集合。

trait使用举例

trait Printable {fn print(&self);
}struct Person {name: String,
}impl Printable for Person {fn print(&self) {println!("Person: {}", self.name);}
}struct Book {title: String,
}impl Printable for Book {fn print(&self) {println!("Book: {}", self.title);}
}fn main() {let person = Person { name: "Alice".to_string() };let book = Book { title: "Rust Programming".to_string() };person.print();book.print();
}

我们定义了一个 trait,名为 Printable,它定义了一个 print 方法。然后,我们为 Person 结构体和 Book 结构体分别实现了 Printable trait。

在 main 函数中,我们创建了一个 person 对象和一个 book 对象,并调用了它们的 print 方法。由于它们都实现了 Printable trait,因此可以以相同的方式调用 print 方法。

运行这个示例程序将会输出以下结果:

Person: Alice
Book: Rust Programming

在这个例子中,trait 提供了一种将不同类型统一对待的方式。通过实现相同的 trait,我们可以在代码中以一致的方式处理不同的类型,并共享相同的行为和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android : AndroidStudio开发工具优化

1.开启 gradle 单独的守护进程 Windows: 进入目录 C:\Users\Administrator\.gradle 创建文件: gradle.properties # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Settings specified in this file will override any Gradle s…

前端时间的失败总结复盘

分享失败经验,前段时间的总结复盘: 与伙伴合作面对异常决策要及时提出质疑,怼,别太客气,客气起来,小心翼翼在意他人情绪那么这个项目就会让人难受,不要因为因为伙伴身上有标签/光环/权威就觉得…

怎么把视频转换为gif?

怎么把视频转换为gif?视频和 GIF 动图在许多方面都有所不同,主要的区别包括它们的数据格式、播放方式以及用途。视频:通常以常见的视频格式如MP4、AVI、MOV等存储,它们包含了连续的图像帧以及音频轨道(如果有的话&…

ISP算法简述-BLC

Black Level Calibration, 黑电平矫正 现象 1)在纯黑条件下拍张图,你会发现像素值不为0 2)或者你发现图像整体偏色 这些问题可能是黑电平导致的。 原因 存在黑电平的原因有2个: 1)sensor的电路本身存在暗电流。暗电流主要产生在光电信号转换过程中&#…

国内某求职app遭“撞库”攻击,百万条用户数据泄露

什么是撞库? 简单来说:一些用户为了方便记忆,会采用相同的账户密码登录多个网站或app,甚至是存储关键信息的系统平台。如果其中一个平台有漏洞被黑客利用窃取了账户名和密码,黑客便用这套凭证登录大量测试所有平台&am…

葡萄酒的储存条件会影响葡萄酒的陈酿吗?

自20世纪末以来,葡萄酒储存有关的行业一直在增长,一些葡萄酒鉴赏家可能会选择将葡萄酒存放在家里的专用房间或壁橱里。 自云仓酒庄品牌雷盛红酒分享总所周知,瓶装葡萄酒的储存条件是会影响葡萄酒的陈酿,振动和热波动会加速葡萄酒的…

COCO格式标签(json)内容可视化(python)

主要是查到的可用代码,便于自己使用查询,和有相关需求的提供参考。 代码是MMYOLO下的可视化代码browse_coco_json.py,有json文件和图像文件,可以直接输入执行,输出会把bbox、mask等类型标注展示。 下面直接上代码&am…

【深度学习笔记】09 权重衰减

09 权重衰减 范数和权重衰减利用高维线性回归实现权重衰减初始化模型参数定义 L 2 L_2 L2​范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减 权重衰减的简洁实现 范数和权重衰减 在训练参数化机器学习模型时,权重衰减(decay weight&#xff09…

python中获取函数签名(参数)

说明 有些时候我们不清楚python的函数的具体签名的时候,调用可能会报错,这里就是介绍一种简单的方法来获取函数的签名参数。 语法 获取函数的参数签名可以使用 组件.函数.__signature__示例: 我想要获取streamlit.text_input函数的参数签…

golang开发之个微机器人开发

请求URL: http://域名地址/sendFile 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是string登录实例标识wcId是string接收…

使用Redis实现购物车后端处理

本文中心思想:实现购物车的后端处理逻辑。 本文将教会你掌握:1.存储商品信息,2.存储购物车信息,3.获取购物车信息。 存储商品信息 商品包含多个属性,例如:名字&#x…

it资产管理系统

it资产管理系统这个词组初听有些陌生,再听却别有一种科技感。 先来看下it资产管理系统的定义: 它是一种针对企业IT资产进行全面管理和监控的工具,它可以帮助企业实现对IT资源的有效利用和合理配置,提高企业的运营效率和市场竞争力…

查看php进程占用内存

要查看每个PHP中Swoole进程占用的内存,您可以使用Linux的一些工具和命令来实现。 使用ps命令列出正在运行的进程,可以通过进程名或进程ID(PID)过滤结果: ps aux | grep php这将显示与PHP相关的进程列表。 通过top命令…

Python 3 读写 json 文件

使用函数 json.dumps()、loads() 、json.dump()、json.load() 。 1 json.dumps() 将python对象编码成Json字符串 import jsondata {name:Alice,age:25,gender:F,city:北京 }# 1 json.dumps() 将python对象编码成Json字符串 print(type(data)) json_str json.dumps(data…

mysql安装环境

安装mysql https://www.mysql.com/downloads/ 如果操作系统版本比较低,还需要安装NET Framework4.5.2 搭建环境变量 MySQL可视化界面: 破解navicat:

spark不同结构Dataset合并

1.先将hdfs(或本地)存储的csv文件加载为Dataset 先在本地C盘准备两个csv文件 test.csv client_id,behives,del,normal_status,cust_type,no_trd_days 7056,zl,1,hy,个人,2 7057,cf,1,hy,个人,12 7058,hs,2,hy,个人,1200 212121,0,sj,hy,个人,1100 212122,1,yx,hy,个人,100 212…

如何入驻抖音本地生活服务商,门槛太高怎么办?

随着抖音本地生活服务市场的逐渐成熟,越来越多平台开始涉及本地生活服务领域,而本地生活服务商成了一个香窝窝,为了保护用户权益和平台生态,对入驻入驻抖音本地生活服务商的条件及审核也越来越严格,这让很多想成为抖音…

ES常用操作语句

ES常用操作语句 注:本文中的操作语句基于ES5.5和7.7的版本,版本不同操作语句上可能有细微差别,如5.5版本有索引类型,7.7版本已废弃,查询不应该带索引类型 新增 # 添加字段,并设置字段类型 PUT /索引/_map…

LeetCode56. 合并区间

&#x1f517;:【贪心算法&#xff0c;合并区间有细节&#xff01;LeetCode&#xff1a;56.合并区间-哔哩哔哩】 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()0){return intervals;…

【页面】表格展示

展示 Dom <template><div class"srch-result-container"><!--左侧--><div class"left"><div v-for"(item,index) in muneList" :key"index" :class"(muneIndexitem.mm)?active:"click"pa…