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

【06】泛型

文章目录

  • 泛型
    • 函数中的泛型
    • 结构体中的泛型
      • 结构体中的方法
    • 枚举中的泛型

泛型

RUST通过在编译时对泛型代码的单态化(monomorphization)来保证运行效率。即,在编译时对泛型填充具体数据类型转换为特定代码进行编译。
由于RUST编译试图穷举所有类型,所以代码需要支持所有类型才可以编译。或者限制为指定几个类型。<T>中的T指定任一数据类型。

函数中的泛型

fn fun1<T>(list: &[T]) -> &T {}

结构体中的泛型

struct Point<T> {
	x: T,
	y: T,
}

struct Point<T, U> {
	x: T,
	y: U,
}

结构体中的方法

struct Point<T> {
	x: T,
	y: T,
}

// impl<T> 里面指定的泛型T
impl<T> Point<T> {
	fn x(&self) -> &T {
		&self.x
	}
}

可以为实例实现方法,也就是单个数据类型

impl Point<f32>{
	fn distance_from_origin(&self) -> f32 {
		(self.x.powi(2) + self.y.powi(2)).sqrt()
	}
}

impl<>中定义的方法也使用与impl<>不同的数据类型。

struct Point<X1, Y1> {
	x: X1,
	y: Y1,
}

impl<X1, Y1> Point<X1, Y1> {
fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
		Point {
			x: self.x,
			y: other.y,
		}
	}
}

枚举中的泛型

// 用于处理空的Option
enum Option<T>{
	Some(T),
	None,
}
// 用于处理错误的Result
enum Result<T,E>{
	Ok(T),
	Err(E),
}

http://www.kler.cn/a/548711.html

相关文章:

  • Httprint 指纹识别技术:网络安全的关键洞察
  • [高等数学] 分部积分法
  • 大模型开发实战篇5:多模态--文生图模型API
  • Flask中获取请求参数的一些方式总结
  • DeepSeek在linux下的安装部署与应用测试
  • 基于Python的Flask微博话题舆情分析可视化系统
  • Dify+Ollama+DeepSeek部署本地大模型+知识库搭建
  • Typescript class中的方法和函数类型的属性有何不同?
  • 每日一题——47. 全排列 II
  • Linux系统Centos安装部署nginx代理
  • 数字内容体验未来趋势:五大平台横向对比与深度解析
  • 惠普HP Color LaserJet CP1215/1210彩色打印机打印校准方法
  • . Unable to find a @SpringBootConfiguration(默认软件包中的 Spring Boot 应用程序)
  • AI大模型学习(二): LangChain(一)
  • SpringBoot+数据可视化的奶茶点单购物平台(程序+论文+讲解+安装+调试+售后)
  • GMSL 实例1:当 MAX96717 遇上 MAX96724,打通 Camera 视频数据传输
  • 运维脚本——2.备份与恢复
  • YOLO11环境搭建CUDA12.6
  • AI大模型技术基础入门
  • [NKU]C++基础课(二)--- externC、强制类型转换、类与对象、面向对象程序设计语言、对象创建和使用、类的定义、封装