Комбінація полів (як в C), але з методами. Типи структур: named fields, tuple-like, unit structs.
struct Person {
name: String,
age: u32,
email: String,
}
let p = Person {
name: String::from("Alice"),
age: 30,
email: String::from("alice@example.com"),
};
println!("{}, {}", p.name, p.age);
impl Person {
fn new(name: String, age: u32) -> Person {
Person { name, age, email: String::new() }
}
fn greet(&self) { // immutable borrow
println!("Hello, {}", self.name);
}
fn set_email(&mut self, email: String) { // mutable borrow
self.email = email;
}
}
Перерахування значень. На відміну від C, варіанти можуть містити дані.
enum Color {
Red,
Green,
Blue,
}
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(u8, u8, u8),
}
let msg = Message::Write(String::from("hello"));
Розпізнавання та розпакування значень enum за допомогою match.
match msg {
Message::Quit => println!("Quit"),
Message::Move { x, y } => println!("Move to {}, {}", x, y),
Message::Write(s) => println!("Write: {}", s),
Message::ChangeColor(r, g, b) => println!("Color: {}, {}, {}", r, g, b),
}
| [object Object] |
| [object Object] |
| [object Object] |
Лекція 16: Обработка ошибок с Result и Option
Дякую за увагу! 💾