rust笔记12:rust的泛型

news/2025/3/9 8:59:29/

Rust 的泛型实现是其类型系统的核心特性之一,它允许编写灵活且可重用的代码,同时保持类型安全和性能。以下从 泛型数据类型泛型类型参数trait bound生命周期泛型 四个方面详细介绍 Rust 的泛型实现,并解释编译器如何通过 静态分发 处理泛型。


1. 泛型数据类型

泛型数据类型允许你定义可以处理多种类型的结构体、枚举和函数,而无需为每种类型重复编写代码。

示例:泛型结构体

rust">struct Point<T> {x: T,y: T,
}
  • Point<T> 是一个泛型结构体,T 是类型参数。
  • 你可以用任意类型实例化 Point,例如 Point<f32>Point<i32>

示例:泛型枚举

rust">enum Option<T> {Some(T),None,
}
  • Option<T> 是标准库中的泛型枚举,T 是类型参数。
  • 它可以表示任意类型的值或空值。

2. 泛型类型参数

泛型类型参数用于在函数、方法或实现块中定义泛型。

示例:泛型函数

rust">fn largest<T: PartialOrd>(list: &[T]) -> &T {let mut largest = &list[0];for item in list {if item > largest {largest = item;}}largest
}
  • T 是泛型类型参数。
  • PartialOrd 是 trait bound,表示 T 必须实现 PartialOrd trait。

示例:泛型方法

rust">impl<T> Point<T> {fn new(x: T, y: T) -> Self {Point { x, y }}
}
  • impl<T> 为泛型结构体 Point<T> 实现方法。

3. Trait Bound

Trait bound 是对泛型类型参数的约束,用于指定泛型类型必须实现哪些 trait。

示例:简单 Trait Bound

rust">fn print_debug<T: std::fmt::Debug>(value: T) {println!("{:?}", value);
}
  • T: std::fmt::Debug 表示 T 必须实现 Debug trait。

示例:多重 Trait Bound

rust">fn clone_and_print<T: Clone + std::fmt::Debug>(value: T) {let cloned = value.clone();println!("{:?}", cloned);
}
  • T 必须同时实现 CloneDebug trait。

示例:where 语法

rust">fn complex_function<T, U>(t: T

http://www.ppmy.cn/news/1577776.html

相关文章

EXCEL自动化13 | 批量重命名工作簿中的工作表

目录 一. 重命名工作表1. 修改单个文件的工作表2. 修改单个文件的多个工作表3. 替换文件中的所有工作表名二. 批量重命名多个文件的工作表如下图所示,文件夹下有6个excel文件(工作簿)。打开任意一个工作簿,可看到其中有工作表,如 Sheet 1 。 要将6个工作簿中的工作表 “S…

React基础之ReactRouter

一个路径path对于一个组件component&#xff0c;当我们在浏览器中访问一个path的时候&#xff0c;path对于的组件会在页面中渲染 npm i react-router-dom 抽象路由模块 在src下创建一个router目录&#xff0c;创建一个index.js入口文件 import Login from "../page/Login&…

Kubernetes中的微服务

一、什么是微服务 在 Kubernetes 中&#xff0c;微服务是一种将应用拆分为独立、可扩展的小型服务的架构模式。每个微服务通常运行在独立的容器中&#xff0c;并通过网络进行通信。Kubernetes 提供了多种机制来管理和暴露这些微服务&#xff0c;使其能够高效地运行和扩展。 1…

小程序 wxml 语法 —— 37 setData() - 修改对象类型数据

这一节主要演示如何新增、修改和删除对象数据中单个/多个属性&#xff0c;我们直接使用微信开发者工具进行演示&#xff1b; 新增单个/多个属性 在 pages/cate/cate.js 中添加数据声明和对应的新增属性方法&#xff0c;如下&#xff1a; Page({// 在小程序页面中所需要使用的…

Vue3-vs-Vue2

Vue3 性能提升 与 Vue2.x 相比, mount 50% 提升, 内存占用小 120% Vue3 框架体积减少 核心代码 Composition API: 13.5kb, 最小 11.75kb所有 Runtime: 22.5kb (Vue2 是 32kb) Vue3 新特性 TS 重写 Diff 算法, 使用 Proxy 性能更优, 框架体积更小新的 Compiler, 通过注释标…

每日一题———面试

一、http和https的区别是什么&#xff1f; 区别主要有以下四点&#xff1a; 1.HTTP是超文本传输协议&#xff0c;信息是文明传输&#xff0c;存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷&#xff0c;在TCP和HTTP网络层之间加入SSL/TLS安全协议&#xff0c;使得报文能够加…

【数据仓库与数据挖掘基础】决策分析

一、数据仓库中的决策分析 1. 定义 决策分析在数据仓库中是指利用存储在数据仓库中的数据&#xff0c;通过分析和报告生成支持决策的信息。数据仓库整合了来自不同来源的数据&#xff0c;经过清洗和转换&#xff0c;提供了一个统一的视图&#xff0c;帮助管理层和决策者做出明…

vLLM + Open-WebUI 本地私有化部署 DeepSeek-R1-Distill-Qwen-32B 方案

一、vLLM 部署 DeepSeek-R1-Distill-Qwen-32B DeepSeek-R1-Distill 系列模型是 DeepSeek-R1 的蒸馏模型&#xff0c;官方提供了从 1.5B - 70B 不同尺寸大小的模型。特别适合在计算资源有限的环境中部署。 DeepSeek-R1 各个版本的蒸馏模型评估结果如下&#xff1a; 其中 DeepS…