在 Rust 中,结构体(Structs)是一种自定义数据类型,用于将多个相关的值组合成一个单一的类型。结构体在 Rust 中的使用非常灵活,可以用来模拟各种数据结构和对象。 今天这篇文章我们来总结下rust中的结构体用法,我们探讨它的基本用法以及与元组,枚举,单元,模式匹配,泛型结合的用法。我们将还会探讨结构体与结构体之间的嵌套,结构体中属性的可见性和生命周期,干货满满对你学习rust的结构体大有裨益,这这篇文章带你彻底理解结构体。
定义结构体
在使用结构体之前我们首先要定义一个结构体,后面才能实例化使用它。它的定义语法就是关键字struct
后面空格加上结构体名称如果有结构体中有属性则后面跟上大括号{}
,大括号中定义结构体的属性:属性名:类型
,多个属性用英文逗号,
隔开。如果是一个单元体结构体则不用跟大括号,如果是元组结构体则根据元组定义后面跟上小括号()
,小括号中指定属性的数据类型。如果结构体是泛型结构体的话则在结构体名称后面跟上<>
,<>中使用大写字母用做占位符。 需要注意的是结构体名称字母开头要大写,遵循驼峰命名法则。
带有属性的结构体定义语法
struct StructName{
field1:type1,
field2:type2,
}
/// 具体实例
struct Point{
x:i32,
y:i32,
}
单元体结构体
struct UnitStructName
/// 具体例子
struct Unit;
元组结构体
struct TupleStruct(type1,type2.....)
/// 具体例子
struct Point3D(i32,i32,i32)
泛型结构体
struct StructName<T,U>{
field1:T,
field2:U,
}
/// 具体例子
struct Point<T,U>{
x:T,
y:U,
}
实例化结构体
/// 1.带有属性的结构体定义语法
struct Point{
x:i32,
y:i32,
}
let p = Point{
x:23,
y:34,
};
/// 2.单元体结构体
struct Unit;
let. u = Unit;
/// 3.元组结构体
struct TupleStruct(i32,f32)
let ts = TupleStruct(3,3.14);
/// 4.泛型结构体
struct Rectangle<T,U>{
width:T,
height:U,
}
let r = Rectangle{
width:23,
height:345.23,
};
访问字段
结构体访问它的字段则是实例化对象.
后面跟上属性即可,但是元组结构体比较的特殊,它遵循元组的访问规则,访问第n个元素则就是实例化对象.下标(n-1)
。
struct Rectangle<T,U>{
width:T,
height:U,
}
let r = Rectangle{
width:23,
height:345.23,
};
let width = r.width;
println!("Rectangle of width is {}",width);
struct TupleStruct(i32,f32)
let ts = TupleStruct(3,3.14);
let first = ts.0;
方法
我们可以为结构体实现这个结构体行为的方法,例如我们定义一个Person
结构体,Person
结构体中有姓名(name:String),住址(address:String),年龄(age:i32)三个属性高。我们知道我们作为一个人会说话,会走路,会跑。那么说话,走路,跑步就是Person
结构体的行为,那么在rust中每个行为对应一个方法
。其语法就是impl
关键字空格跟上结构体名称:impl structName{fn1 fn2}
。
impl Person {
fn new(name:String,address:String,age:i32)->Slef{
Person{
name:name,
address:address,
age:age,
}
}
}
/// 长方形结构体
struct Rectangle{
width:i32,
height:i32,
}
impl Rectangle{
/// 实例化结构体
fn new(t:i32,u:i32)->Self{
Rectangle{
width:t,
height:u,
}
}
/// 计算长方形周长的方法
fn girth(&self)->i32{
2 *(self.width + self.height)
}
}
我们结构体分为上下两篇来讲,这是结构体的第一篇我们讲了结构体的定义语法,实例化结构体,访问结构体属性以及为结构体实现方法的知识点,通过这些知识点我们已经了解结构体的基本用法,后续我我们将带来结构体高级的用法。
评论区
写评论细
--
👇
PeixyJ: /// 2.单元体结构体 struct Unit; let. u = Unit; <<--这个应该写错了,是笔误吧
加上各种结构体的最佳使用场景就更好了
/// 2.单元体结构体 struct Unit; let. u = Unit; <<--这个应该写错了,是笔误吧