泛型是每个语言实现抽象的基本功能,要在语言中实现抽象那么泛型必不可少。
泛型的含义: 在编译器不需要指定数据类型,运行期间再指定数据类型。
Java中的泛型是一个通过<T>的方式实现的,那么Rust中的泛型如何实现呢?
泛型函数
/// Pick `even` or `odd` depending on the value of `n`.
//定义一个函数,该函数的请求参数和响应参数都指定T即泛型
fn pick<T>(n: i32, even: T, odd: T) -> T {
if n % 2 == 0 {
even
} else {
odd
}
}
fn main() {
//使用时再确定具体的类型,这里指定的泛型类型为i32
println!("picked a number: {:?}", pick(97, 222, 333));
//这里指定的泛型类型为元组
println!("picked a tuple: {:?}", pick(28, ("dog", 1), ("cat", 2)));
}
以上代码演示的在函数中如何使用泛型。Rust中的泛型跟Java类似都是通过<>的方式实现。
泛型数据类型
前面说了如何在函数中定义泛型,接下来就是在结构体中定义泛型
#[derive(Debug)]
struct Point<T> { //定义结构体Point,并且设置泛型T
x: T,
y: T,
}
//定义结构体Point的实现方法,并且设定泛型T
impl<T> Point<T> {
fn coords(&self) -> (&T, &T) {
(&self.x, &self.y)
}
// fn set_x(&mut self, x: T)
}
fn main() {
//初始化结构体并且指定泛型类型为i32
let integer = Point { x: 5, y: 10 };
//初始化结构体并且指定泛型类型为f64
let float = Point { x: 1.0, y: 4.0 };
println!("{integer:?} and {float:?}");
println!("coords: {:?}", integer.coords());
}
以上就是Rust泛型的基础实现,很基础。