首页 > 其他分享 >rust struct 初始化的语法糖 - struct update syntax

rust struct 初始化的语法糖 - struct update syntax

时间:2022-11-20 23:24:03浏览次数:68  
标签:xiaoming String name xiaohong update syntax struct

rust语法提供了..操作符来实现struct更新的语法糖,参见Struct Update syntax

废话少说,直接定义一个学生的struct:

#[derive(Default, Debug)]
struct Student {
    age: u32,
    name: String,
    grade: u8
}

接下来看下怎么用struct update syntax来创建学生

fn main() {
    let xiaohong = Student{
        name: String::from("litte hong"),
        age: 6,
        grade: 1
    };

    let xiaoming = Student{
        name: String::from("xiaoming"),
        ..xiaohong
    };
    println!("{:#?}", xiaoming );
}

上面的代码先实例化了一个xiaohong的struct,struct的每个字段都赋值了;创建第二个studentxiaonming的时候,刚好小红和小明是同班同学,我们可以利用..来实例化xiaoming这个struct, 就不需要为每个字段都一一赋值了。

接下来介绍一个不用实现创建xiaohong, 也能使用struct update syntax来创建第二个学生的技巧;

定义一个帮忙展开struct默认值的辅助函数

#[inline]
pub fn default<T: Default>() -> T {
    std::default::Default::default()
}

然后创建我们的学生:

let stu = Student{
    name: String::from("xiaoming"),
    ..default()
};

这样子,除了name是我们赋值外, 其他struct的字段都初始化为该字段类型的默认值,比如struct的name字段是String就被初始化为"", grade字段的默认值就是0。

标签:xiaoming,String,name,xiaohong,update,syntax,struct
From: https://www.cnblogs.com/linyihai/p/16910027.html

相关文章