1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-29 17:10:46 +02:00
comprehensive-rust/src/structs/field-shorthand.md
Charisee Chiw 3242afae09
Create default.md (#370)
* Create default.md

* Update SUMMARY.md

* Update SUMMARY.md

* Update default.md

* Update default.md

* Update default.md
2023-03-07 17:11:43 +01:00

1.7 KiB

Field Shorthand Syntax

If you already have variables with the right names, then you can create the struct using a shorthand:

#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}

impl Person {
    fn new(name: String, age: u8) -> Person {
        Person { name, age }
    }
}

fn main() {
    let peter = Person::new(String::from("Peter"), 27);
    println!("{peter:?}");
}
  • The new function could be written using Self as a type, as it is interchangeable with the struct type name

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }
    impl Person {
        fn new(name: String, age: u8) -> Self {
            Self { name, age }
        }
    }
    
  • Implement the Default trait for the struct. Define some fields and use the default values for the other fields.

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }
    impl Default for Person {
        fn default() -> Person {
            Person {
                name: "Bot".to_string(),
                age: 0,
            }
        }
    }
    fn create_default() {
        let tmp = Person {
            ..Default::default()
        };
        let tmp = Person {
            name: "Sam".to_string(),
            ..Default::default()
        };
    }
    
  • Methods are defined in the impl block.

  • Use struct update syntax to define a new structure using peter. Note that the variable peter will no longer be accessible afterwards.

  • Use {:#?} when printing structs to request the Debug representation.