通用类型

收藏765

阅读11133

更新时间2025-08-27

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

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

示例:通用集合

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

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

输出

[20, 30, 40]

考虑以下代码片段 −

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

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

示例:通用结构

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

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

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

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

共29课时

61.7万人学习

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

共25课时

39.3万人学习

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

共43课时

70.9万人学习

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

共25课时

61.6万人学习

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

共22课时

23万人学习

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

共28课时

33.9万人学习

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

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号