手册
目录
泛型是一种为不同类型的多个上下文编写代码的工具。 在 Rust 中,泛型是指数据类型和特征的参数化。 泛型允许通过减少代码重复和提供类型安全来编写更简洁和干净的代码。 泛型的概念可以应用于方法、函数、结构、枚举、集合和特征。
以下示例声明一个只能存储整数的向量。
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的通用结构。
value is :350 value is :Tom
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
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
70.9万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习