From 6b3ae8be686887ed5f80483e9d628d9c88ce9082 Mon Sep 17 00:00:00 2001 From: Rowan Torbitzky-Lane Date: Sat, 22 Mar 2025 18:31:06 -0500 Subject: [PATCH] finished ch10.1 --- ch10/generics-intro/Cargo.lock | 7 +++++ ch10/generics-intro/Cargo.toml | 6 +++++ ch10/generics-intro/src/main.rs | 23 ++++++++++++++++ ch10/syntax/Cargo.lock | 7 +++++ ch10/syntax/Cargo.toml | 6 +++++ ch10/syntax/src/main.rs | 48 +++++++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+) create mode 100644 ch10/generics-intro/Cargo.lock create mode 100644 ch10/generics-intro/Cargo.toml create mode 100644 ch10/generics-intro/src/main.rs create mode 100644 ch10/syntax/Cargo.lock create mode 100644 ch10/syntax/Cargo.toml create mode 100644 ch10/syntax/src/main.rs diff --git a/ch10/generics-intro/Cargo.lock b/ch10/generics-intro/Cargo.lock new file mode 100644 index 0000000..2e7e013 --- /dev/null +++ b/ch10/generics-intro/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "generics-intro" +version = "0.1.0" diff --git a/ch10/generics-intro/Cargo.toml b/ch10/generics-intro/Cargo.toml new file mode 100644 index 0000000..c7cc0f1 --- /dev/null +++ b/ch10/generics-intro/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "generics-intro" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/ch10/generics-intro/src/main.rs b/ch10/generics-intro/src/main.rs new file mode 100644 index 0000000..76d11e0 --- /dev/null +++ b/ch10/generics-intro/src/main.rs @@ -0,0 +1,23 @@ +fn largest(list: &[i32]) -> &i32 { + let mut largest = &list[0]; + + for item in list { + if item > largest { + largest = item; + } + } + + largest +} + +fn main() { + let number_list = vec![34, 50, 25, 100, 65]; + + let result = largest(&number_list); + println!("The largest number is {result}"); + + let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8]; + + let result = largest(&number_list); + println!("The largest number is {result}"); +} diff --git a/ch10/syntax/Cargo.lock b/ch10/syntax/Cargo.lock new file mode 100644 index 0000000..245ce71 --- /dev/null +++ b/ch10/syntax/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "syntax" +version = "0.1.0" diff --git a/ch10/syntax/Cargo.toml b/ch10/syntax/Cargo.toml new file mode 100644 index 0000000..b32a1d6 --- /dev/null +++ b/ch10/syntax/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "syntax" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/ch10/syntax/src/main.rs b/ch10/syntax/src/main.rs new file mode 100644 index 0000000..f68f375 --- /dev/null +++ b/ch10/syntax/src/main.rs @@ -0,0 +1,48 @@ +// The compiler can't assume anything about T, must give +// the call a Haskell like constraint +fn largest(list: &[T]) -> &T { + let mut largest = &list[0]; + + for item in list { + if item > largest { + largest = item; + } + } + + largest +} + +struct Point { + x: T, + y: T, +} + +impl Point { + fn x(&self) -> &T { + &self.x + } +} + +// Can have non-generic implementations +impl Point { + fn distance_from_origin(&self) -> f32 { + (self.x.powi(2) + self.y.powi(2)).sqrt() + } +} + +fn main() { + let number_list = vec![34, 50, 25, 100, 65]; + + let result = largest(&number_list); + println!("The largest number is {result}"); + + let char_list = vec!['y', 'm', 'a', 'q']; + + let result = largest(&char_list); + println!("The largest char is {result}"); + + let integer = Point { x: 5, y: 10 }; + let float = Point { x: 1.0, y: 4.0 }; + + println!("integer.x = {}", integer.x()); +}