Rust 教程

浏览27884
更新时间2025-08-27

泛型是一种为不同类型的多个上下文编写代码的工具。 在 Rust 中,泛型是指数据类型和特征的参数化。 泛型允许通过减少代码重复和提供类型安全来编写更简洁和干净的代码。 泛型的概念可以应用于方法、函数、结构、枚举、集合和特征。

<T> syntax 称为类型参数,用于声明泛型构造。 T 代表任何数据类型。

示例:通用集合

以下示例声明一个只能存储整数的向量。

fn main(){
   let mut vector_integer: Vec<i32> = vec![20,30];
   vector_integer.push(40);
   println!("{:?}",vector_integer);
}

输出

[20, 30, 40]

考虑以下代码片段 −

fn main() {
   let mut vector_integer: Vec<i32> = vec![20,30];
   vector_integer.push(40);
   vector_integer.push("hello"); 
   //error[E0308]: mismatched types
   println!("{:?}",vector_integer);
}

上面的例子表明,整数类型的向量只能存储整数值。 因此,如果我们尝试将字符串值推入集合中,编译器将返回错误。 泛型使集合更加类型安全。

示例:通用结构

类型参数代表一个类型,编译器稍后会填充该类型。

struct Data<T> {
   value:T,
}
fn main() {
   //i32 的通用类型
   let t:Data<i32> = Data{value:350};
   println!("value is :{} ",t.value);
   //String 的通用类型
   let t2:Data<String> = Data{value:"Tom".to_string()};
   println!("value is :{} ",t2.value);
}

上面的示例声明了一个名为Data的通用结构。 类型指示某种数据类型。 main() 函数创建两个实例 − 该结构的一个整数实例和一个字符串实例。

输出

value is :350
value is :Tom

Trait

Trait 可用于跨多个结构实现一组标准行为(方法)。 特征就像面向对象编程中的接口。 Trait 的语法如下所示 −

声明一个 Trait

trait some_trait {
   //abstract or method which is empty
   fn method1(&self);
   // this is already implemented , this is free
   fn method2(&self){
      //some contents of method2
   }
}

trait 可以包含具体方法(带主体的方法)或抽象方法(不带主体的方法)。 如果方法定义将由实现该特征的所有结构共享,则使用具体方法。 但是,结构可以选择覆盖由特征定义的函数。

如果方法定义因实现结构而异,则使用抽象方法。

语法 - 实现特征

impl some_trait for structure_name {
   // implement method1() there..
   fn method1(&self ){
   }
}

以下示例使用方法 print() 定义了一个特征 Printable,该特征由结构 book 实现。

fn main(){
   //创建该结构的实例
   let b1 = Book {
      id:1001,
      name:"Rust in Action"
   };
   b1.print();
}
//声明一个结构体
struct Book {
   name:&'static str,
   id:u32
}
//声明一个 trait
trait Printable {
   fn print(&self);
}
//实现 trait
impl Printable for Book {
   fn print(&self){
      println!("Printing book with id:{} and name {}",self.id,self.name)
   }
}

输出

Printing book with id:1001 and name Rust in Action

通用函数

该示例定义了一个通用函数,该函数显示传递给它的参数。 该参数可以是任何类型。 参数的类型应实现 Display 特征,以便 println! macro 可以打印其值。

use std::fmt::Display;

fn main(){
   print_pro(10 as u8);
   print_pro(20 as u16);
   print_pro("Hello TutorialsPoint");
}

fn print_pro<T:Display>(t:T){
   println!("Inside print_pro generic function:");
   println!("{}",t);
}

输出

Inside print_pro generic function:
10
Inside print_pro generic function:
20
Inside print_pro generic function:
Hello TutorialsPoint

相关视频

更多

免费

phpStudy极速入门视频教程
初级phpStudy极速入门视频教程

54.6万次学习

收藏

免费

phpStudy V8 视频教程
初级phpStudy V8 视频教程

38.8万次学习

收藏

免费

小皮面板使用视频教程
初级小皮面板使用视频教程

21.6万次学习

收藏

免费

好课诞生记
初级好课诞生记

7.1万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65.2万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.4万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

77万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.3万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.5万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

134万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载