05 Rust 结构体
2023-12-18 06:06:51
结构体
Rust 中的结构体(Struct)与元组(Tuple)都可以将若干个类型不一定相同的数据捆绑在一起形成整体,但结构体的每个成员和其本身都有一个名字,这样访问它成员的时候就不用记住下标了。
元组常用于非定义的多值传递,而结构体用于规范常用的数据结构。结构体的每个成员叫做"字段"。
// 引入调试库用于输出结构体
#[derive(Debug)]
struct Person {
name: String,
age: u8,
}
// 结构体 impl 块可以写几次,效果相当于它们内容的拼接!
impl Person {
// 结构体方法
fn sayhello(&self) {
println!("Hello I am {}, {}", self.name, self.age);
}
// 结构体关联函数, 没有 &self 参数, 不依赖实例
fn create(name: String, age: u8) -> Person {
// 当 value 和 key 名称相同, 可简写
let p = Person { name: name, age };
p
}
}
fn main() {
let mut p1 = Person::create("Jim".to_string(), 18);
p1.age += 1;
p1.sayhello();
// 更新部分, 其余一致
let p2 = Person {
name: "Tom".to_string(),
..p1
};
// 使用占位符 {:#?} 或 {:?} 输出结构体
println!("{:#?}", p2);
}
元组结构
struct Color(i32, i32, i32);
let black = Color(0, 0, 0);
单元类结构
单元类结构是没有任何字段的结构体
struct Unit;
let u = Unit;
结构数据的所有权
结构体必须掌握字段值所有权,因为结构体失效的时候会释放所有字段。这就是为什么本章的案例中使用了 String 类型而不使用 &str 的原因。
但这不意味着结构体中不能定义引用型字段,这需要通过"生命周期"机制来实现。但现在还难以说明"生命周期"概念,所以只能在后面章节说明。
文章来源:https://blog.csdn.net/qq_36525177/article/details/135042811
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!