结构体的定义的三种方式 | 1.普通/常规结构体 struct StructName { |
如何实例化结构体 | 1.实例化普通结构体 假如你有一个现有结构体,并且想创建一个新的实例,但只需要更改其中一部分,就可以使用结构体更新语法 |
结构体的所有权 | 结构体所有权的规则 1.创建结构体时,就相当于书架上上了新书,这些新书(字段)属于这个书架 let bookshelf = bookshelf { book1:"书1", book2:"书2" } 2.赋值和转移, 当你把这个书架(结构体实例)给了别人,别人获得了这个书架和这个书架 上的书,这些东西都不属于你了 let friendshelf = myshelf //书架给了你朋友你 不属于你了 3.使用引用:如果你只想让别人看书架和书,不想给给人,可以用&来借用结构体字段 fn show_books(bookshelf: &Bookshelf) { println!("书架上有:{} 和 {}", bookshelf.book1, bookshelf.book2); } show_books(&my_bookshelf); // 借用书架上的书来展示,`my_bookshelf` 依然有效 |
如何输出结构体 | 如何输出结构体 1.在最开头写 #[derive(Debug)] 2.输出的时候用 {:?}这种格式 println!("rect1 is {:?}", rect1); |
结构体方法 | 1.结构体方法写在impl中 2.结构体方法的第一个参数是self 可以是self &self &mut self &self:借用结构体实例 不允许修改 &mut self:可变引用 允许修改结构体实例 self: 移动结构体实例 方法结束后实例不再有效 示例 1.struct Rectangle { width:u32, height:u32, } 2.impl Rectangle{ fn area($self) -> u32 { self.width * self.height } } |
结构体关联函数 | 1.在impl中 却没有 &self参数 2.不需要示例(实例化后的结构体),但需要声明在哪个impl中 #[derive(Debug)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn create(width: u32, height: u32) -> Rectangle { Rectangle { width, height } } } fn main() { let rect = Rectangle::create(30, 50); println!("{:?}", rect); } |
rust学习_结构体
最新推荐文章于 2024-10-03 04:24:59 发布