finished ch10.1
This commit is contained in:
parent
32dd95cc03
commit
6b3ae8be68
7
ch10/generics-intro/Cargo.lock
generated
Normal file
7
ch10/generics-intro/Cargo.lock
generated
Normal 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"
|
6
ch10/generics-intro/Cargo.toml
Normal file
6
ch10/generics-intro/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "generics-intro"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
23
ch10/generics-intro/src/main.rs
Normal file
23
ch10/generics-intro/src/main.rs
Normal 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
7
ch10/syntax/Cargo.lock
generated
Normal 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
6
ch10/syntax/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "syntax"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
48
ch10/syntax/src/main.rs
Normal file
48
ch10/syntax/src/main.rs
Normal 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());
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user