Rust入门-struct、枚举enum 、Opion<T>与模式匹配match、if let

本文介绍了Rust编程中的结构体(struct)定义、实例化、字段访问以及简写方式,还讲解了更新语法、元组结构体和无字段结构体的使用。接着,深入探讨了枚举的定义、数据附加以及枚举嵌套结构体和枚举的Option类型,对比了Option与null的区别。最后,展示了如何使用match语句处理Option枚举,并通过if let处理特定情况。文章通过实例演示了Rust中处理数据结构的强大功能。
摘要由CSDN通过智能技术生成

struct

定义

struct user{
	name:String,
	email:String,
	active:bool,
	}
	//注意最后一项也有逗号

实例化

实例化时要为每个字段赋值,顺序不用按照声明顺序

struct student{
        name:String,
        age:i64,
        active:bool,
    }
    let xh=student{
        name:String::from("xiaohong"),
        age:66,
        active:true,
    };

取得struct中的某个值

  • stu.name
  • 一旦struct的实例可变,所有成员可变
  • 可以作为函数的返回值

字段初始化简写

当字段名与字段值对应变量名相同时,就可以使用字段初始化简写的方式
在这里插入图片描述

更新语法

在这里插入图片描述
其中的…user1 表明所有未赋值的成员都采用user1的数据进行赋值

tuple struct

在这里插入图片描述

struct r(u32,u32);
let r1=r(3,6);
fn test(re:r)-> u32{
    re.0*re.1
}

Unit-Like Struct(没有任何字段)

适用于在某个类型中仅实现接口

输出struct

  • 在struct前加 #【derive(debug)】
  • 占位符 {:#?}或者{:?}
fn main() {
    #[derive(Debug)]
    struct student{
        name:String,
        age:i64,
        active:bool,
    }
    let xh=student{
        name:String::from("xiaohong"),
        age:66,
        active:true,
    };
    println!("{:#?}",xh);
}

在这里插入图片描述

struct 的方法

方法和函数类似:fn关键字、名称、参数、返回值
方法与函数的不同之处:

 - 方法是在struct(或 enum、trait 对象)的上下文中定义
 - 第一个参数是self,表示方法被调用的struct实例
 - ` #[derive(Debug)]
struct reac{
    x:u32,
    y:u32,
}
impl reac{
    fn area(&self)->u32{
        self.x*self.y
    }
}
let r= reac{
    x:6,
    y:9,
};
println!("{}",r.area());`

定义方法

在这里插入图片描述在这里插入图片描述

关联函数

在这里插入图片描述

枚举

定义

enum ipaddr{
        V4,
        V6,
    }
    
    let four=ipaddr::V4;
    let six=ipaddr::V6;

将数据附加到枚举的变体中

在这里插入图片描述

枚举中可以嵌入任何类型 包括结构体、枚举

option枚举

定义于标准库中
在prelude(预导入模块中)
描述了:某个值可能存在(某种类型)或不存在的情况

Rust中没有null

Rust中类似Null概念的枚举 Option

  • 标准库中的定义
  • enum Option{
  • some(T),
  •  None,
    
  • }
  • 它包含在预导入模块中,可以直接使用:
  • Option
  •  Some(T)
    
  • None
    
  • 在这里插入图片描述

比null好在哪

  • 在这里插入图片描述

match

match 分支中可以绑定值

在这里插入图片描述

match与option

在这里插入图片描述

match匹配必须穷举所有的可能

fn plus_one(x:Option<i32>)->Option<i32>{
    //match必须穷举所有的类型
    //没有none会报错
    match x{
        None=>None,
        Some(i)=>Some(i+1)
    }
}

可以用_来代替剩余未枚举的所有情况

flus plus_one(x:u8)->u8{
    match x{
        1=>1,
        2=>2,
        3=>3,
        _=>()//枚举其他所有情况
    }
}

使用if let针对一种情况进行处理

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

参考视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值