< 返回版块

lijobs 发表于 2024-11-06 22:44

在 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)
   }
}

我们结构体分为上下两篇来讲,这是结构体的第一篇我们讲了结构体的定义语法,实例化结构体,访问结构体属性以及为结构体实现方法的知识点,通过这些知识点我们已经了解结构体的基本用法,后续我我们将带来结构体高级的用法。

评论区

写评论
SleepyBoy 2024-11-07 09:44

--
👇
PeixyJ: /// 2.单元体结构体 struct Unit; let. u = Unit; <<--这个应该写错了,是笔误吧

xuejianxinokok 2024-11-07 08:55

加上各种结构体的最佳使用场景就更好了

PeixyJ 2024-11-07 08:47

/// 2.单元体结构体 struct Unit; let. u = Unit; <<--这个应该写错了,是笔误吧

1 共 3 条评论, 1 页