- struct结构体
使用struct关键字,并为整个struct命名
在花括号内,为所有字段定义名称和类型
//创建结构体
struct User{
username:String,
email:String,
sign:u64,
active:bool,
}
fn main(){
}
实例化struct
struct User{
username:String,
email:String,
sign:u64,
active:bool,
}
fn main(){
let mut user1 = User{//内部赋值顺序可以改变 但是每个元素都要赋值
email:String::from("126355@qq.com"),
username:String::from("xzc"),
sign:5,
active:true,
};
}
user1.email = String::from("hello");
println!("{}", user1.email);//点标记法取得struct中某个值
- Tuple struct
struct color(i32, i32);
struct point(i32, i32);
let c = color(0, 0);//但c和p是不同的类型,因为来自不同的tuple struct实例
let p = point(0, 0);
-
struct实战
计算长方形的面积
#[derive(Debug)]//为struct的输出选择方式
struct rectangle{
length:u32,
width:u32,
}
fn main(){
let mut rect = rectangle{
length:10,
width:20,
};
println!("{:#?}", rect);//输出struct类型的实例{:?}和{:#?}相似
println!("area is {}", area(&rect));
}
fn area(rect:&rectangle)->u32{
rect.length*rect.width
}
-
struct的方法
方法和函数类似:fn关键字、名称、参数、返回值
例子:
impl rectangle{//为struct定义方法
fn area(&self)->u32{
self.length*self.width
}
}
println!("area is {}", rect.area());//调用struct函数
-
关联函数
关联函数不同于方法
#[derive(Debug)]
struct rect{
length:u32,
width:u32,
}
fn main(){
let s = rect::square(30);//调用关联函数
println!("{:#?}", s);
}
impl rect{
fn area(&self)->u32{
self.length*self.width
}
//此处定义关联函数(在方法里)
fn square(size:u32)->rect{//不需要&self 调用时用::
rect{
length:size,
width:size,
}
}
}