mirror of
https://github.com/rust-lang/rustlings.git
synced 2026-01-09 20:29:18 +00:00
structs, enums
This commit is contained in:
parent
20000a4578
commit
13a3b6dd34
@ -2,11 +2,12 @@
|
||||
//
|
||||
// No hints this time! ;)
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Message {
|
||||
// TODO: define a few types of messages as used below
|
||||
Quit,
|
||||
Echo,
|
||||
Move,
|
||||
ChangeColor,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
@ -3,11 +3,13 @@
|
||||
// Execute `rustlings hint enums2` or use the `hint` watch subcommand for a
|
||||
// hint.
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Message {
|
||||
// TODO: define the different variants used below
|
||||
Move { x: i32, y : i32 },
|
||||
Echo(String),
|
||||
ChangeColor(i32, i32, i32),
|
||||
Quit,
|
||||
}
|
||||
|
||||
impl Message {
|
||||
|
||||
@ -5,10 +5,12 @@
|
||||
// Execute `rustlings hint enums3` or use the `hint` watch subcommand for a
|
||||
// hint.
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
enum Message {
|
||||
// TODO: implement the message variant types based on their usage below
|
||||
ChangeColor(u8, u8, u8),
|
||||
Echo(String),
|
||||
Move(Point),
|
||||
Quit,
|
||||
}
|
||||
|
||||
struct Point {
|
||||
@ -43,6 +45,12 @@ impl State {
|
||||
// variants
|
||||
// Remember: When passing a tuple as a function argument, you'll need
|
||||
// extra parentheses: fn function((t, u, p, l, e))
|
||||
match message {
|
||||
Message::ChangeColor(a, b, c) => self.change_color((a, b, c)),
|
||||
Message::Echo(msg) => self.echo(msg),
|
||||
Message::Move(p) => self.move_position(p),
|
||||
Message::Quit => self.quit(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -5,17 +5,21 @@
|
||||
// Execute `rustlings hint structs1` or use the `hint` watch subcommand for a
|
||||
// hint.
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
struct ColorClassicStruct {
|
||||
// TODO: Something goes here
|
||||
red : i32,
|
||||
green : i32,
|
||||
blue : i32,
|
||||
}
|
||||
|
||||
struct ColorTupleStruct(/* TODO: Something goes here */);
|
||||
struct ColorTupleStruct(i32, i32, i32);
|
||||
|
||||
#[derive(Debug)]
|
||||
struct UnitLikeStruct;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct JustStefano;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -23,7 +27,11 @@ mod tests {
|
||||
#[test]
|
||||
fn classic_c_structs() {
|
||||
// TODO: Instantiate a classic c struct!
|
||||
// let green =
|
||||
let green = ColorClassicStruct {
|
||||
red : 0,
|
||||
green : 255,
|
||||
blue : 0,
|
||||
};
|
||||
|
||||
assert_eq!(green.red, 0);
|
||||
assert_eq!(green.green, 255);
|
||||
@ -33,7 +41,7 @@ mod tests {
|
||||
#[test]
|
||||
fn tuple_structs() {
|
||||
// TODO: Instantiate a tuple struct!
|
||||
// let green =
|
||||
let green = ColorTupleStruct (0, 255, 0);
|
||||
|
||||
assert_eq!(green.0, 0);
|
||||
assert_eq!(green.1, 255);
|
||||
@ -43,9 +51,13 @@ mod tests {
|
||||
#[test]
|
||||
fn unit_structs() {
|
||||
// TODO: Instantiate a unit-like struct!
|
||||
// let unit_like_struct =
|
||||
let st = JustStefano{};
|
||||
let unit_like_struct = UnitLikeStruct {};
|
||||
let message = format!("{:?}s are fun!", unit_like_struct);
|
||||
|
||||
let msg2 = format!("{:?}, hello ", st);
|
||||
|
||||
assert_eq!(message, "UnitLikeStructs are fun!");
|
||||
assert_eq!(msg2, "JustStefano, hello ");
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,6 @@
|
||||
// Execute `rustlings hint structs2` or use the `hint` watch subcommand for a
|
||||
// hint.
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Order {
|
||||
@ -30,6 +29,18 @@ fn create_order_template() -> Order {
|
||||
}
|
||||
}
|
||||
|
||||
fn create_my_order () -> Order {
|
||||
Order {
|
||||
name: "Hacker in Rust".to_string(),
|
||||
year: 2019,
|
||||
made_by_phone: false,
|
||||
made_by_mobile: false,
|
||||
made_by_email: true,
|
||||
item_number: 123,
|
||||
count: 1,
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -38,7 +49,13 @@ mod tests {
|
||||
fn your_order() {
|
||||
let order_template = create_order_template();
|
||||
// TODO: Create your own order using the update syntax and template above!
|
||||
// let your_order =
|
||||
// let your_order = create_my_order();
|
||||
// or better ...
|
||||
let your_order = Order {
|
||||
name: "Hacker in Rust".to_string(),
|
||||
count : 1,
|
||||
..order_template
|
||||
};
|
||||
assert_eq!(your_order.name, "Hacker in Rust");
|
||||
assert_eq!(your_order.year, order_template.year);
|
||||
assert_eq!(your_order.made_by_phone, order_template.made_by_phone);
|
||||
|
||||
@ -7,8 +7,6 @@
|
||||
// Execute `rustlings hint structs3` or use the `hint` watch subcommand for a
|
||||
// hint.
|
||||
|
||||
// I AM NOT DONE
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Package {
|
||||
sender_country: String,
|
||||
@ -29,12 +27,12 @@ impl Package {
|
||||
}
|
||||
}
|
||||
|
||||
fn is_international(&self) -> ??? {
|
||||
// Something goes here...
|
||||
fn is_international(&self) -> bool {
|
||||
self.sender_country != self.recipient_country
|
||||
}
|
||||
|
||||
fn get_fees(&self, cents_per_gram: i32) -> ??? {
|
||||
// Something goes here...
|
||||
fn get_fees(&self, cents_per_gram: i32) -> i32 {
|
||||
self.weight_in_grams * cents_per_gram
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user