rust struct 初始化的语法糖 - struct update syntax
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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署