finished ch10.1

This commit is contained in:
Rowan Torbitzky-Lane 2025-03-22 18:31:06 -05:00
parent 32dd95cc03
commit 6b3ae8be68
6 changed files with 97 additions and 0 deletions

7
ch10/generics-intro/Cargo.lock generated Normal file
View File

@ -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"

View File

@ -0,0 +1,6 @@
[package]
name = "generics-intro"
version = "0.1.0"
edition = "2021"
[dependencies]

View File

@ -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}");
}

7
ch10/syntax/Cargo.lock generated Normal file
View File

@ -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"

6
ch10/syntax/Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "syntax"
version = "0.1.0"
edition = "2021"
[dependencies]

48
ch10/syntax/src/main.rs Normal file
View File

@ -0,0 +1,48 @@
// The compiler can't assume anything about T, must give
// the call a Haskell like constraint
fn largest<T: std::cmp::PartialOrd>(list: &[T]) -> &T {
let mut largest = &list[0];
for item in list {
if item > largest {
largest = item;
}
}
largest
}
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}
// Can have non-generic implementations
impl Point<f32> {
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());
}