视频地址

头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/

讲解内容

1、泛型是具体类型或者其它属性的抽象替代,用于减少代码重复。

2、在函数定义中使用泛型。
例子:
++++++++不使用泛型+++++++++++

//for i32
fn largest_i32(list: &[i32]) -> i32 {let mut leargest = list[0];for &item in list.iter() {if item > largest {largest = item;}}largest
}//for char
fn largest_char(list: &[char]) -> char {let mut leargest = list[0];for &item in list.iter() {if item > largest {largest = item;}}largest
}fn main(){let number_list = vec![1, 2, 22, 3, 42];let r1 = largest_i32(&number_list);println!("r1 = {}", r1);let char_list = vec!['a', 'y', 'c', 'd'];let r2 = largest_char(&char_list);println!("r2 = {}", r2);
}
//+++++++++使用泛型:会报错的函数++++++++++++
fn largest<T:PartialOrd + Copy>(list: &[T]) -> T { //注意,要实现比较和复制的trait才行,否则报错let mut largest = list[0];for &item in list.iter() {if item > largest {largest = item;}}largest
}fn main(){let number_list = vec![1, 2, 22, 3, 42];let r1 = largest_i32(&number_list);println!("r1 = {}", r1);let char_list = vec!['a', 'y', 'c', 'd'];let r2 = largest_char(&char_list);println!("r2 = {}", r2);
}

3、在结构体中使用泛型。
例子1:

#[derive(Debug)]
struct Point<T> {x: T,y: T,
}fn main() {let integer = Point {x: 1, y: 2};println!("{:#?}", integer);let float = Point {x: 0.99, y: 1.99};println!("{:#?}", float);
}

例子2:

#[derive(Debug)]
struct Point<T, U> {x: T,y: U,
}fn main() {let a = Point {x: 1, y: 2.0};println!("{:#?}", a);let b = Point {x: 1, y: 1.99};println!("{:#?}", b);
}

4、枚举中的泛型

//复习
enum Option<T> {Some(T),None,
}enum Result<T, E> {Ok(T),Err(e),
}

5、方法中的泛型

struct Point<T> {x: T,y: T,
}impl<T> Point<T> {fn get_x(&self) -> &T {&self.x}fn get_y(&self) -> &T {&self.y}
}
fn main() {let p = Point {x: 1, y: 2};println!("p.x = {}", p.get_x());println!("p.y = {}", p.get_y());
}

例子2:方法和结构体中使用不同的类型

struct Point<T, U> {x: T,y: U,
}
impl<T, U> Point<T, U> {fn mixup<V, W>(self, other: Point<V, W>) -> Point<T, W> {Point {x: self.x,y: other.y,}}
}
fn main() {let p1 = Point { x: 5, y: 10.4 };let p2 = Point { x: "Hello", y: 'c'};let p3 = p1.mixup(p2);println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
}

6、使用泛型并不会造成程序性能上的损失。rust通过在编译时进行泛型代码的单态化来保证效率。单态化时通过填充编译时使用的具体类型,将通用代码转换为特定代码的过程。

Rust 编程视频教程(进阶)——001 泛型相关推荐

  1. Rust 编程视频教程(进阶)——017_1 消息传递 1

    视频地址 头条地址:https://www.ixigua.com/i6775861706447913485 B站地址:https://www.bilibili.com/video/av81202308 ...

  2. Rust 编程视频教程(进阶)——022 模式

    视频地址 头条地址:https://www.ixigua.com/i6775861706447913485 B站地址:https://www.bilibili.com/video/av81202308 ...

  3. 留言获赠书 | 朱春雷:Rust编程:入门 实战与进阶

    祝微信公众号 乐生活与爱IT 的读者朋友们,五一劳动节,吃好喝好睡好玩好,节日快乐! 今天给读者朋友们一个福利,请您在文章后面留言,留言比较精彩的,且获赞数比较多的朋友(至少3位),将有机会获得一本, ...

  4. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  5. 177G Python语言编程视频教程大全

    资源涵盖老男孩Python培训教程,传智播客Python教程,老王python基础进阶项目,智普教育python就业培训视频教程(195集全),等经典培训教程,中谷教育-Python视频教程(完整版) ...

  6. 【干货】2020年最新编程视频教程,速度收藏!!

    入职程序行多年,愈发觉得编程技术更新换代非常快,大家都会觉得编程的门槛很低,很多人都涌入这个行业岗位,但是工作两三年之后,就会发现遇到了一定的瓶颈,这个时候就需要静下心来学习知识,突破自我. 小编在这 ...

  7. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

    rust 编程入门 Rust has been voted Stack Overflow's most loved programming language for five years in a r ...

  8. Powermill汽车件模具五轴数控CNC编程视频教程

    Powermill汽车件模具五轴数控CNC编程视频教程 链接:https://pan.baidu.com/s/1GZnfXQFDNme1utw8s2zfsg 提取码:arqq

  9. PowerMill2019基础到三四五轴编程视频教程全

    PowerMill2019基础到三四五轴编程视频教程全 链接:https://pan.baidu.com/s/1r84h9VRmqBnn3v0pwj3iQw 提取码:fngy

最新文章

  1. 听说又有兄弟因为用YYYY-MM-dd 被锤了...
  2. mongodb存储二进制数据的二种方式——binary bson或gridfs
  3. JQuery对checkbox操作 (循环)
  4. 【数据结构与算法】之深入解析“解数独”的求解思路与算法示例
  5. mysql无法导入函数和存储过程解决方法
  6. wifi名称可以有空格吗_收购公司后可以变更公司名称吗,变更公司名称和股权如何处理?...
  7. log4j使用方法--视频地址: http://www.letv.com/ptv/pplay/11475
  8. linux内核源码目录结构
  9. BP神经网络python代码实现
  10. 华为荣耀黑科技,打造震撼AI智能机
  11. 孔乙己:new的五种写法
  12. windows 文件夹正在使用 “操作无法完成,因为其中的文件夹或文件已在另一程序中打开“ 解决办法
  13. python绘制四叶草_python绘图四叶草
  14. 关于南通大学教务学生管理公众微信的用户体验。
  15. dp在约会上是什么意思_饭圈用语dp是什么意思什么梗? 饭圈为什么喜欢用缩写?...
  16. flash播放器插件与flash播放器的区别
  17. 小布机器人怎么断网_小布同学智能机器人好坏判断有诀窍,三大误区要避免
  18. EEA为以太坊以隐私为主的Web应用发布标准化架构栈
  19. SDUT-团战可以输、提莫必须死(简单搜索bfs)
  20. 如何戒掉对高脂热饮食的“瘾”?

热门文章

  1. 启动VMware虚拟机显示:物理内存不足无法使用的五种解决方法
  2. 茂林读经:非农行情看好探底回升
  3. python中color的用法顺序_Python Matplotlib.colors.Normalize用法及代码示例
  4. dsp 28377s+w5500 通过tftp下载到dsp内部flash
  5. 线性代数 13 向量组的秩 最大无关组
  6. Javascript中,检测对象中是否存在某个属性
  7. 周黑鸭:“美味缔造者”的背后,蕴藏着数据驱动的奥秘
  8. 在校大学生想当程序员,听老叔这番话,你会少走很多弯路【18年开发经验分享】
  9. python学习笔记 -- 03 实现切割九图
  10. 抓取虎扑王者荣耀板块最近十页帖子,2.5W回帖数据 ,来看看JR们都有哪些有趣的信息