File tree 2 files changed +57
-0
lines changed
rust_by_example/generics/associated_items
2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments