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。
原文地址:http://www.cnblogs.com/linyihai/p/16910027.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性