• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
牛福儿
帮助2

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针对一种情况进行处理

学新通学新通
学新通

参考视频

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcjbhk
系列文章
更多 icon
同类精品
更多 icon
继续加载