complete: options

This commit is contained in:
seth 2021-06-23 11:59:44 +08:00
parent 199f264ad0
commit d830113fd4
3 changed files with 10 additions and 14 deletions

View file

@ -1,23 +1,21 @@
// option1.rs // option1.rs
// Make me compile! Execute `rustlings hint option1` for hints // Make me compile! Execute `rustlings hint option1` for hints
// I AM NOT DONE
// you can modify anything EXCEPT for this function's sig // you can modify anything EXCEPT for this function's sig
fn print_number(maybe_number: Option<u16>) { fn print_number(maybe_number: Option<u16>) {
println!("printing: {}", maybe_number.unwrap()); println!("printing: {}", maybe_number.unwrap());
} }
fn main() { fn main() {
print_number(13); print_number(Some(13));
print_number(99); print_number(Some(99));
let mut numbers: [Option<u16>; 5]; let mut numbers: [Option<u16>; 5] = [Some(1); 5];
for iter in 0..5 { for iter in 0..5 {
let number_to_add: u16 = { let number_to_add: u16 = {
((iter * 1235) + 2) / (4 * 16) ((iter * 1235) + 2) / (4 * 16)
}; };
numbers[iter as usize] = number_to_add; numbers[iter as usize] = Some(number_to_add);
} }
} }

View file

@ -1,12 +1,10 @@
// option2.rs // option2.rs
// Make me compile! Execute `rustlings hint option2` for hints // Make me compile! Execute `rustlings hint option2` for hints
// I AM NOT DONE
fn main() { fn main() {
let optional_word = Some(String::from("rustlings")); let optional_word = Some(String::from("rustlings"));
// TODO: Make this an if let statement whose value is "Some" type // TODO: Make this an if let statement whose value is "Some" type
word = optional_word { if let Some(word) = optional_word {
println!("The word is: {}", word); println!("The word is: {}", word);
} else { } else {
println!("The optional word doesn't contain anything"); println!("The optional word doesn't contain anything");
@ -19,7 +17,9 @@ fn main() {
// TODO: make this a while let statement - remember that vector.pop also adds another layer of Option<T> // TODO: make this a while let statement - remember that vector.pop also adds another layer of Option<T>
// You can stack `Option<T>`'s into while let and if let // You can stack `Option<T>`'s into while let and if let
integer = optional_integers_vec.pop() { if let Some(integer) = optional_integers_vec.pop(){
println!("current value: {}", integer); if let Some(value) = integer {
println!("current value: {}", value);
}
} }
} }

View file

@ -1,8 +1,6 @@
// option3.rs // option3.rs
// Make me compile! Execute `rustlings hint option3` for hints // Make me compile! Execute `rustlings hint option3` for hints
// I AM NOT DONE
struct Point { struct Point {
x: i32, x: i32,
y: i32, y: i32,
@ -11,7 +9,7 @@ struct Point {
fn main() { fn main() {
let y: Option<Point> = Some(Point { x: 100, y: 200 }); let y: Option<Point> = Some(Point { x: 100, y: 200 });
match y { match &y {
Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y), Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
_ => println!("no match"), _ => println!("no match"),
} }