结构体中使用泛型

1
2
3
4
5
6
7
8
9
10
11
//结构体中使用不同的泛型
#[derive(Debug)]
struct Point<T,U> {
x: T,
y: U,
}
fn main() {
let a = Point{x:1.1,y:'a'};
println!("{:?}",a);

}

枚举中使用泛型

1
2
3
4
5
6
7
8
9
enum Option<T> {
Some(T),
None,
}
enum Result<T,E> {
Ok(T),
Err(E),
}

方法中使用泛型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# [derive(Debug)]
struct Point<T> {
x:T,
y:T,
}
impl <T> Point<T> {
fn get_x(&self) -> &T {
&self.x
}
fn get_y(&self) -> &T {
&self.y
}
}
struct Point2<T,U> {
x:T,
y:U,
}
impl <T,U> Point2<T,U> {
fn create_point<V,W> (self, other:Point2<V,W>) -> Point2<T,W> {
//这里使用self是因为没有实现cpoy trait,如果实现了copy trait就可以
Point2 {
x: self.x,
y: other.y,
}
}
}

fn main() {
let p = Point{x:1.1,y:2.2};
println!("x = {},y = {}",p.get_x(),p.get_y());

let p = Point{x:1.1,y:2.2};
println!("x = {},y = {}",p.get_x(),p.get_y());

let p1 = Point2{x:5,y:1.1};
let p2 = Point2{x:"hello",y:'c'};
let p3 = p1.create_point(p2);
println!("p3 = {:?}",p3);
}