走进 Rust:泛型
Rust 大约 1624 字函数中使用泛型
fn test<T>(t: T) -> T{
t
}
结构体中使用泛型
单个参数
struct Point<T> {
x: T,
y: T,
}
fn main() {
let integer = Point { x: 5, y: 10 };
let float = Point { x: 1.0, y: 4.0 };
}
多个参数
struct Point<T, U> {
x: T,
y: U,
}
fn main() {
let both_integer = Point { x: 5, y: 10 };
let both_float = Point { x: 1.0, y: 4.0 };
let integer_and_float = Point { x: 5, y: 4.0 };
}
枚举中使用泛型
系统自带枚举Option
enum Option<T> {
Some(T),
None,
}
系统自带枚举Result
enum Result<T, E> {
Ok(T),
Err(E),
}
方法中使用泛型
单个参数
x
为泛型方法,distance_from_origin
只能为float32
类型的使用。
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}
impl Point<f32> {
fn distance_from_origin(&self) -> f32 {
(self.x.powi(2) + self.y.powi(2)).sqrt()
}
}
fn main() {
let p = Point { x: 5, y: 10 };
println!("p.x = {}", p.x());
let p2 = Point { x: 500.0, y: 100.0 };
println!("p2.x = {}", p2.x());
println!("p2.distance_from_origin = {}", p2.distance_from_origin());
}
多个参数
方法中的参数类型与结构体的泛型类型可以不一致。例子中的结构体类型是T,U
而方法中需要的参数的类型为V,W
,返回另外一个不同类型T,W
的结构体。
struct Point<T, U> {
x: T,
y: U,
}
impl<T, U> Point<T, U> {
fn mixup<V, W>(self, other: Point<V, W>) -> Point<T, W> {
Point {
x: self.x,
y: other.y,
}
}
}
fn main() {
let p1 = Point { x: 5, y: 10.4 };
let p2 = Point { x: "Hello", y: 'c'};
let p3 = p1.mixup(p2);
println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
}
阅读 2470 · 发布于 2020-07-20
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓
昵称:
随便看看
换一批
-
macOS 解决 ApacheDirectoryStudio 无法启动问题阅读 639
-
Java 查看虚拟机日志阅读 150
-
Spring Boot OpenFeign PATCH 请求报错:java.net.ProtocolException: Invalid HTTP method: PATCH阅读 1547
-
软考-系统架构设计师:层次化存储结构阅读 1711
-
Java InetAddress DNS 缓存阅读 149
-
Vue v-once 组件只渲染一次阅读 796
-
开源邮件服务器阅读 1044
-
Java 按字典顺序排序请求参数阅读 5390
-
Flutter 禁止上报开发信息阅读 298
-
Android 获取应用信息阅读 3560