Add a project for demonstrating closures
This commit is contained in:
parent
920dcf4ff7
commit
9cd6c7bdef
3 changed files with 65 additions and 0 deletions
shirt-company
7
shirt-company/Cargo.lock
generated
Normal file
7
shirt-company/Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "shirt-company"
|
||||||
|
version = "0.1.0"
|
6
shirt-company/Cargo.toml
Normal file
6
shirt-company/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "shirt-company"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
52
shirt-company/src/main.rs
Normal file
52
shirt-company/src/main.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#[derive(Debug, PartialEq, Copy, Clone)]
|
||||||
|
enum ShirtColor {
|
||||||
|
Red,
|
||||||
|
Blue,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Inventory {
|
||||||
|
shirts: Vec<ShirtColor>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Inventory {
|
||||||
|
fn giveaway(&self, user_preference: Option<ShirtColor>) -> ShirtColor {
|
||||||
|
user_preference.unwrap_or_else(|| self.most_stocked())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn most_stocked(&self) -> ShirtColor {
|
||||||
|
let mut num_red = 0;
|
||||||
|
let mut num_blue = 0;
|
||||||
|
|
||||||
|
for color in &self.shirts {
|
||||||
|
match color {
|
||||||
|
ShirtColor::Red => num_red += 1,
|
||||||
|
ShirtColor::Blue => num_blue += 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if num_red > num_blue {
|
||||||
|
ShirtColor::Red
|
||||||
|
} else {
|
||||||
|
ShirtColor::Blue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let store = Inventory {
|
||||||
|
shirts: vec![ShirtColor::Blue, ShirtColor::Red, ShirtColor::Blue],
|
||||||
|
};
|
||||||
|
|
||||||
|
let user_pref1 = Some(ShirtColor::Red);
|
||||||
|
let giveaway1 = store.giveaway(user_pref1);
|
||||||
|
println!(
|
||||||
|
"The user with preference {:?} gets {:?}",
|
||||||
|
user_pref1, giveaway1
|
||||||
|
);
|
||||||
|
|
||||||
|
let user_pref2 = None;
|
||||||
|
let giveaway2 = store.giveaway(user_pref2);
|
||||||
|
println!(
|
||||||
|
"The user with preference {:?} gets {:?}",
|
||||||
|
user_pref2, giveaway2
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in a new issue