ch6 done
This commit is contained in:
parent
b3dfadba39
commit
dacb5fa112
7
ch6/book_match/Cargo.lock
generated
Normal file
7
ch6/book_match/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 = "book_match"
|
||||
version = "0.1.0"
|
6
ch6/book_match/Cargo.toml
Normal file
6
ch6/book_match/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "book_match"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
76
ch6/book_match/src/main.rs
Normal file
76
ch6/book_match/src/main.rs
Normal file
@ -0,0 +1,76 @@
|
||||
enum Coin {
|
||||
Penny,
|
||||
Nickel,
|
||||
Dime,
|
||||
Quarter,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum UsState {
|
||||
California,
|
||||
Alabama,
|
||||
Missouri,
|
||||
// so on and so forth
|
||||
}
|
||||
|
||||
enum StateCoin {
|
||||
Penny,
|
||||
Nickel,
|
||||
Dime,
|
||||
Quarter(UsState),
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let five = Some(5);
|
||||
let six = plus_one(five);
|
||||
let none = plus_one(None);
|
||||
|
||||
let dice_roll = 9;
|
||||
match dice_roll {
|
||||
3 => add_fancy_hat(),
|
||||
7 => remove_fancy_hat(),
|
||||
_ => (), // just like Haskell! Can tell Rust that no code should be ran with ()
|
||||
}
|
||||
}
|
||||
|
||||
fn value_in_cents(coin: Coin) -> u8 {
|
||||
match coin {
|
||||
Coin::Penny => {
|
||||
// can use curly brackets :)
|
||||
println!("Lucky Penny");
|
||||
1
|
||||
}
|
||||
Coin::Nickel => 5,
|
||||
Coin::Dime => 10,
|
||||
Coin::Quarter => 25,
|
||||
}
|
||||
}
|
||||
|
||||
fn value_in_cents_state(coin: StateCoin) -> u8 {
|
||||
match coin {
|
||||
StateCoin::Penny => {
|
||||
// can use curly brackets :)
|
||||
println!("Lucky Penny");
|
||||
1
|
||||
}
|
||||
StateCoin::Nickel => 5,
|
||||
StateCoin::Dime => 10,
|
||||
StateCoin::Quarter(state) => {
|
||||
println!("State quarter from {state:?}!");
|
||||
25
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn plus_one(x: Option<i32>) -> Option<i32> {
|
||||
// match arms must cover all possibilities
|
||||
match x {
|
||||
None => None,
|
||||
Some(i) => Some(i + 1),
|
||||
}
|
||||
}
|
||||
|
||||
fn add_fancy_hat() {}
|
||||
fn remove_fancy_hat() {}
|
||||
fn move_player(num_spaces: u8) {}
|
||||
fn reroll() {}
|
7
ch6/defining_an_enum/Cargo.lock
generated
Normal file
7
ch6/defining_an_enum/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 = "defining_an_enum"
|
||||
version = "0.1.0"
|
6
ch6/defining_an_enum/Cargo.toml
Normal file
6
ch6/defining_an_enum/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "defining_an_enum"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
78
ch6/defining_an_enum/src/main.rs
Normal file
78
ch6/defining_an_enum/src/main.rs
Normal file
@ -0,0 +1,78 @@
|
||||
// I could make an emum for a buy/sell/hold signal in a long-only strategy
|
||||
// cool project from the android team at google:
|
||||
// https://google.github.io/comprehensive-rust/
|
||||
|
||||
enum IpAddrKind {
|
||||
V4,
|
||||
V6,
|
||||
}
|
||||
|
||||
struct IpAddrOld {
|
||||
kind: IpAddrKind,
|
||||
address: String,
|
||||
}
|
||||
|
||||
// A better way of representing IP in this case
|
||||
enum IpAddrFunc {
|
||||
V4(String),
|
||||
V6(String),
|
||||
}
|
||||
|
||||
// Even better way as these enums can hold
|
||||
// different values, like a tuple, and like Haskell
|
||||
enum IpAddr {
|
||||
V4(u8, u8, u8, u8),
|
||||
V6(String),
|
||||
}
|
||||
|
||||
enum Message {
|
||||
Quit,
|
||||
Move { x: i32, y: i32 },
|
||||
Write(String),
|
||||
ChangeColor(i32, i32, i32),
|
||||
}
|
||||
|
||||
impl Message {
|
||||
fn call(&self) {
|
||||
// method body here
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let four = IpAddrKind::V4;
|
||||
let six = IpAddrKind::V6;
|
||||
|
||||
route(four);
|
||||
route(six);
|
||||
|
||||
let home_old: IpAddrOld = IpAddrOld {
|
||||
kind: IpAddrKind::V4,
|
||||
address: String::from("127.0.0.1"),
|
||||
};
|
||||
|
||||
let loopback_old = IpAddrOld {
|
||||
kind: IpAddrKind::V6,
|
||||
address: String::from("::1"),
|
||||
};
|
||||
|
||||
let home = IpAddrFunc::V4(String::from("127.0.0.1"));
|
||||
let loopback = IpAddrFunc::V6(String::from("::1"));
|
||||
|
||||
let home_num = IpAddr::V4(127, 0, 0, 1);
|
||||
|
||||
// Message section
|
||||
|
||||
let m = Message::Write(String::from("hello"));
|
||||
m.call();
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Option enum section
|
||||
// Essentially Haskell's Maybe Monad
|
||||
// Rust even has a Prelude :pog:
|
||||
let some_number = Some(5);
|
||||
let some_char = Some('e');
|
||||
let absent_number: Option<i32> = None;
|
||||
}
|
||||
|
||||
// takes either kind of IpAddrKind
|
||||
fn route(ip_kind: IpAddrKind) {}
|
7
ch6/if_let/Cargo.lock
generated
Normal file
7
ch6/if_let/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 = "if_let"
|
||||
version = "0.1.0"
|
6
ch6/if_let/Cargo.toml
Normal file
6
ch6/if_let/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "if_let"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
18
ch6/if_let/src/main.rs
Normal file
18
ch6/if_let/src/main.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// More verboseness
|
||||
|
||||
fn main() {
|
||||
let config_max = Some(3u8);
|
||||
if let Some(max) = config_max {
|
||||
println!("Max configured to be: {max}");
|
||||
}
|
||||
// else would be what goes in the _
|
||||
}
|
||||
|
||||
// fn make_sep(usr_str: &str) -> &str {
|
||||
// if usr_str == "" {
|
||||
// let default = "=".repeat(10);
|
||||
// &default
|
||||
// } else {
|
||||
// usr_str
|
||||
// }
|
||||
// }
|
Loading…
x
Reference in New Issue
Block a user