| #![allow(dead_code)] |
| |
| struct Person { |
| age: i32, |
| name: String, |
| } |
| |
| impl ToString for Person { |
| fn to_string(&self) -> String { |
| format!("{} ({})", self.name, self.age) |
| } |
| } |
| |
| fn greet_person_1(p: Person) { |
| println!("Hello {} ({})!", p.name, p.age); |
| } |
| |
| fn greet_person_2(p: &Person) { |
| println!("Hello {} ({})!", p.name, p.age); |
| } |
| |
| fn birthday(p: &mut Person) { |
| p.age += 1; |
| } |
| |
| fn main() { |
| // -- Struct instantiation -- |
| let mut p = Person { age: 30, name: "Mary".to_string() }; |
| |
| // -- Borrowing -- |
| //greet_person_1(p); |
| //greet_person_1(p); |
| |
| greet_person_2(&p); |
| greet_person_2(&p); |
| |
| birthday(&mut p); |
| |
| greet_person_2(&p); |
| |
| // -- Traits -- |
| println!("p = {}", p.to_string()); |
| |
| // -- Debugging -- |
| let x = dbg!(100 + 2) + 3; |
| println!("Hello, world! 100 + 2 + 3 = {}", x); |
| } |