Got all the way to errors!

This commit is contained in:
Justin Kelz 2022-03-28 21:07:12 -07:00
parent d870e3c944
commit 754a006da8
5 changed files with 29 additions and 23 deletions

View File

@ -13,7 +13,6 @@
// Execute the command `rustlings hint hashmap2` if you need // Execute the command `rustlings hint hashmap2` if you need
// hints. // hints.
// I AM NOT DONE
use std::collections::HashMap; use std::collections::HashMap;
@ -35,10 +34,20 @@ fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
Fruit::Pineapple, Fruit::Pineapple,
]; ];
for fruit in fruit_kinds { for fruit in fruit_kinds { // This is sujestive of vectors being iterable
// TODO: Put new fruits if not already present. Note that you // TODO: Put new fruits if not already present. Note that you
// are not allowed to put any type of fruit that's already // are not allowed to put any type of fruit that's already
// present! // present!
basket.entry(fruit).or_insert(1);
/*
So, this is just saying "Hey, add 1
of this fruit if it hasn't already
been added."
*/
} }
} }

View File

@ -6,14 +6,14 @@
// this function to have. // this function to have.
// Execute `rustlings hint errors1` for hints! // Execute `rustlings hint errors1` for hints!
// I AM NOT DONE
pub fn generate_nametag_text(name: String) -> Option<String> {
pub fn generate_nametag_text(name: String) -> Result<String,String> {
if name.len() > 0 { if name.len() > 0 {
Some(format!("Hi! My name is {}", name)) Ok(format!("Hi! My name is {}", name))
} else { } else {
// Empty names aren't allowed. // Empty names aren't allowed.
None Err("`name` was empty; it must be nonempty.".into())
} }
} }
@ -28,7 +28,7 @@ mod tests {
fn generates_nametag_text_for_a_nonempty_name() { fn generates_nametag_text_for_a_nonempty_name() {
assert_eq!( assert_eq!(
generate_nametag_text("Beyoncé".into()), generate_nametag_text("Beyoncé".into()),
Some("Hi! My name is Beyoncé".into()) Ok("Hi! My name is Beyoncé".into())
); );
} }

View File

@ -7,7 +7,6 @@
// you think each value is. That is, add either `string_slice` or `string` // you think each value is. That is, add either `string_slice` or `string`
// before the parentheses on each line. If you're right, it will compile! // before the parentheses on each line. If you're right, it will compile!
// I AM NOT DONE
fn string_slice(arg: &str) { fn string_slice(arg: &str) {
println!("{}", arg); println!("{}", arg);
@ -17,14 +16,14 @@ fn string(arg: String) {
} }
fn main() { fn main() {
???("blue"); string("blue".to_string());
???("red".to_string()); string("red".to_string());
???(String::from("hi")); string(String::from("hi"));
???("rust is fun!".to_owned()); string("rust is fun!".to_owned());
???("nice weather".into()); string("nice weather".into());
???(format!("Interpolation {}", "Station")); string(format!("Interpolation {}", "Station"));
???(&String::from("abc")[0..1]); string_slice(&String::from("abc")[0..1]);
???(" hello there ".trim()); string_slice(" hello there ".trim());
???("Happy Monday!".to_string().replace("Mon", "Tues")); string("Happy Monday!".to_string().replace("Mon", "Tues"));
???("mY sHiFt KeY iS sTiCkY".to_lowercase()); string("mY sHiFt KeY iS sTiCkY".to_lowercase());
} }

View File

@ -2,7 +2,6 @@
// Make me compile without changing the function signature! // Make me compile without changing the function signature!
// Execute `rustlings hint strings1` for hints ;) // Execute `rustlings hint strings1` for hints ;)
// I AM NOT DONE
fn main() { fn main() {
let answer = current_favorite_color(); let answer = current_favorite_color();
@ -10,5 +9,5 @@ fn main() {
} }
fn current_favorite_color() -> String { fn current_favorite_color() -> String {
"blue" String::from("blue") // String::`F`rom will bugout
} }

View File

@ -2,17 +2,16 @@
// Make me compile without changing the function signature! // Make me compile without changing the function signature!
// Execute `rustlings hint strings2` for hints :) // Execute `rustlings hint strings2` for hints :)
// I AM NOT DONE
fn main() { fn main() {
let word = String::from("green"); // Try not changing this line :) let word = String::from("green"); // Try not changing this line :)
if is_a_color_word(word) { if is_a_color_word(&*word) { // So I needed to match types here
println!("That is a color word I know!"); println!("That is a color word I know!");
} else { } else {
println!("That is not a color word I know."); println!("That is not a color word I know.");
} }
} }
fn is_a_color_word(attempt: &str) -> bool { fn is_a_color_word(attempt: &str) -> bool { // The type specified here needed to be respected when we passed the variable word into the function/
attempt == "green" || attempt == "blue" || attempt == "red" attempt == "green" || attempt == "blue" || attempt == "red"
} }