Sintaxe Abreviada de Campos

Se você já tiver variáveis com os nomes corretos, poderá criar a estrutura (struct) usando uma abreviação:

#[derive(Debug)]
struct Pessoa {
    nome: String,
    idade: u8,
}

impl Pessoa {
    fn new(nome: String, idade: u8) -> Pessoa {
        Pessoa { nome, idade }
    }
}

fn main() {
    let pedro = Pessoa::new(String::from("Pedro"), 27);
    println!("{pedro:?}");
}
  • A função new poderia ser escrita utilizando Self como tipo, já que ele é intercambiável com o nome da struct

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }
    impl Person {
        fn new(name: String, age: u8) -> Self {
            Self { name, age }
        }
    }
  • Implemente a trait Default (Padrão) para a struct. Defina alguns campos e utilize valores padrão para os demais.

    #[derive(Debug)]
    struct Pessoa {
        nome: String,
        idade: u8,
    }
    impl Default for Pessoa {
        fn default() -> Pessoa {
            Pessoa {
                nome: "Robô".to_string(),
                idade: 0,
            }
        }
    }
    fn create_default() {
        let tmp = Pessoa {
            ..Pessoa::default()
        };
        let tmp = Pessoa {
            nome: "Sam".to_string(),
            ..Pessoa::default()
        };
    }
  • Métodos são definidos no bloco impl.

  • Use a sintaxe de atualização de estruturas para definir uma nova struct usando pedro. Note que a variável pedro não será mais acessível após.

  • Utilize {:#?} para imprimir structs utilizando a representação de depuração (Debug).