Rust 结构体

26 篇文章 0 订阅
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}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值