From faa108dc5c84f5c4aecee35a2f490eeedc85cb0d Mon Sep 17 00:00:00 2001 From: garhve Date: Tue, 3 Jan 2023 19:05:48 +0800 Subject: add files --- .../generic-type/Cargo.toml | 8 ++++ .../generic-type/src/main.rs | 45 ++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/Cargo.toml create mode 100644 rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/src/main.rs (limited to 'rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type') diff --git a/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/Cargo.toml b/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/Cargo.toml new file mode 100644 index 0000000..8f1e556 --- /dev/null +++ b/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "generic-type" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/src/main.rs b/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/src/main.rs new file mode 100644 index 0000000..8a3ef34 --- /dev/null +++ b/rust/theBook/chapter-10-generic-types-traits-lifetimes/generic-type/src/main.rs @@ -0,0 +1,45 @@ +#[derive(Debug)] +struct Point { + x: T, + y: U, +} + +// T and U are declared for impl for it goes with struct +impl Point { + fn new(value: T, v: U) -> Self { + Point {x: value, y: v} + } + + // X1 and Y1 are only relavent to method mixup + fn mixup(self, other: Point) -> Point { + Point {x: self.x, y: other.y} + } +} + +fn largest(list: &[T]) -> &T { + let mut largest = &list[0]; + + for item in list { + if largest < item { + largest = item; + } + } + largest +} + +fn main() { + let x = [1,3,5,7,9]; + let y = ['a','b','c','d','e']; + + let result = largest(&x); + println!("{result}"); + + let result = largest(&y); + println!("{result}"); + + let result = Point::new(3.5,7); + println!("{},{}",result.x, result.y); + + let result = result.mixup(Point::new("hello",'c')); + println!("{},{}",result.x, result.y); +} -- cgit v1.2.3-70-g09d2