ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Rust 结构体

2021-06-19 23:32:58  阅读:173  来源: 互联网

标签:name height f32 let Boom broom1 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}
    }
}

标签:name,height,f32,let,Boom,broom1,Rust,结构
来源: https://blog.csdn.net/weixin_41767230/article/details/118060705

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有