Skip to content

Commit 0e4c6ad

Browse files
feat(rust by example): Generics(Associated Items)
1 parent 7d0d429 commit 0e4c6ad

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "associated_items"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
struct Container(i32, i32);
2+
3+
trait Contains {
4+
type A;
5+
type B;
6+
7+
fn contains(&self, _: &Self::A, _: &Self::B) -> bool;
8+
fn first(&self) -> i32;
9+
fn last(&self) -> i32;
10+
}
11+
12+
impl Contains for Container {
13+
type A = i32;
14+
type B = i32;
15+
16+
fn contains(&self, number_1: &Self::A, number_2: &Self::B) -> bool {
17+
(&self.first() == number_1) && (&self.last() == number_2)
18+
}
19+
20+
fn first(&self) -> Self::A {
21+
self.0
22+
}
23+
24+
fn last(&self) -> Self::B {
25+
self.1
26+
}
27+
}
28+
29+
fn difference<C: Contains>(container: &C) -> i32 {
30+
container.last() - container.first()
31+
}
32+
33+
fn main() {
34+
let number_1 = 2;
35+
let number_2 = 4;
36+
37+
let container = Container(number_1, number_2);
38+
39+
println!(
40+
"Does container contain {} and {}: {}",
41+
&number_1,
42+
&number_2,
43+
container.contains(&number_1, &number_2)
44+
);
45+
println!("First number is {}", container.first());
46+
println!("Last number is {}", container.last());
47+
48+
println!("The difference is: {}", difference(&container));
49+
}

0 commit comments

Comments
 (0)