当前位置:   article > 正文

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

rust if let some(t)

struct

定义

struct user{
	name:String,
	email:String,
	active:bool,
	}
	//注意最后一项也有逗号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实例化

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

struct student{
        name:String,
        age:i64,
        active:bool,
    }
    let xh=student{
        name:String::from("xiaohong"),
        age:66,
        active:true,
    };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

取得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
}
  • 1
  • 2
  • 3
  • 4
  • 5

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

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());`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

定义方法

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

关联函数

在这里插入图片描述

枚举

定义

enum ipaddr{
        V4,
        V6,
    }
    
    let four=ipaddr::V4;
    let six=ipaddr::V6;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

在这里插入图片描述

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

option枚举

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

Rust中没有null

Rust中类似Null概念的枚举 Option

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

比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)
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

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

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

参考视频

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/951293
推荐阅读
相关标签
  

闽ICP备14008679号