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