Rust 结构体
2021/6/19 23:58:14
本文主要是介绍Rust 结构体,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
fn main(){ /// 实例化结构体 let width = 1024; let height = 576; let image = GrayscaleMap{ pixels: vec![0;width * height], size:(width, height) }; println!("{:?}",image.size); let hokey = Boom{ name: "Hokey".to_string(), height:60, health:100, position:(100.0, 200.0, 0.0), intent: BroomIntent::FetchWater }; let (hokey1,hokey2) = hokey.chop(); println!("{:#?}\n{:#?}",hokey1,hokey2); } #[derive(Debug)] struct Boom{ name: String, height:u32, health:u32, position: (f32, f32, f32), intent: BroomIntent } #[derive(Debug,Copy,Clone)] enum BroomIntent{ FetchWater, DumpWater } impl Boom{ /// # 构造函数 fn new(name:String,height:u32,health:u32,position:(f32,f32,f32),intent:BroomIntent) -> Boom{ Boom{name,height,health,position,intent} } /// # 一分为二 /// fn chop(self) ->(Boom,Boom){ //高度为原始的一半,其余的不变 // 使用 .. 来继承另一个相同类型的结构体实例的其余字段 let mut broom1 = Boom{height: self.height/2, ..self}; // 因为字段 name 是不可复制的String 类型,所以需要显示的 clone let mut broom2 = Boom{name: broom1.name.clone(), ..broom1}; // 给每一个Boom起个不一样的名字 broom1.name.push_str("_1"); broom2.name.push_str("_2"); (broom1, broom2) } } /// # 命名字段结构体 /// 结构体默认是私有的, /// 要想让这个结构体对外部可见,需要在它的定义之前加上pub,前且其字段也要相应的增加pub #[derive(Debug,Clone)] struct GrayscaleMap{ pixels: Vec<u8>, size: (usize,usize) } impl GrayscaleMap{ /// * 当局部变量或者参与与字段同名时,可以采用如下的简写方式 /// fn new_map(size:(usize, usize),pixels: Vec<u8>) -> GrayscaleMap{ assert_eq!(pixels.len(),size.0 *size.1); GrayscaleMap{pixels,size} } }
这篇关于Rust 结构体的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南