Rust Struct 属性初始化

结构体是用户定义的数据类型,其中包含定义特定实例的字段。结构有助于实现更容易理解的抽象概念。本文介绍几种初始化结构体对象的方法,包括常规方法、Default特征、第三方包实现以及构建器模式。
在这里插入图片描述

Struct声明与初始化

struct Employee {
    id: i32,
    name: String,
    address: String,
    designation: String,
}

每个字段的类型都写在它的名称前面(例如,id的类型是i32,名称是String,地址也是String,等等)。在声明结构体时,应给每个属性值赋,这个过程称为初始化。

struct Student {
   
   
   name:String,
   gpa:i32,
   faculty:String,
}

fn main() {
   
   
   let std1 = Student {
   
   
      faculty:String::from("Computer Science"),
      name:String::from("Nil"),
      gpa:3
   };
   println!("Name is :{}, Faculty is :{}, GPA is :{}",std1.name,std1.faculty,std1.gpa);
}

// 输出结果:Name is :Nil, Faculty is :Computer Science, GPA is :3

我们创建了一个名为Student的结构体,其中包含三个属性name、gpa和faculty。数据类型分别为String、i32和String。该结构在main()中初始化,然后利用println!宏打印结构的属性值。

实现Default 特征

实现Default trait可以为结构体提供默认值。我们可以通过对数据结构进行适度调整来使用自动生成的默认实现。当在数据结构中使用#[derived (Default)]时,编译器给每个属性中设置默认值。默认的布尔值为false,而默认的整数值为0。

#[derive(Default)]
struct Student {
   
   
    name:String,
    gpa:i32,
    faculty:String,
}

fn main() {
   
   
    let std1 = Student {
   
   
        faculty: String::
### 如何在 Rust 中为结构体实现方法 在 Rust 中,可以使用 `impl` 关键字为结构体定义关联函数和方法。下面是一个简单的例子展示如何创建一个带有字段的结构体并为其添加方法。 #### 定义带字段的结构体 ```rust #[derive(Debug)] struct Rectangle { width: u32, height: u32, } ``` #### 使用 impl 实现方法 通过 `impl` 块来声明属于该特定数据类型的函数: ```rust impl Rectangle { // 方法签名前加上 &self 表明这是一个实例方法 fn area(&self) -> u32 { self.width * self.height } // 可变借用允许修改调用者的数据成员 fn set_width(&mut self, new_width: u32) { self.width = new_width; } // 不接收任何参数的方法称为关联函数(类似于构造器) fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } } } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!("The area of the rectangle is {} square pixels.", rect1.area()); let mut rect2 = Rectangle::square(40); rect2.set_width(70); println!("{:#?}", rect2); } ``` 上述代码展示了三种不同类型的方法:获取面积的只读访问方法、设置宽度的可写访问方法以及用于初始化正方形矩形的静态工厂方法[^1]。 对于更复杂的逻辑或者当需要多个特性时,还可以利用特征(trait)机制进一步扩展功能[^2]。 此外,在某些情况下,如果希望操作多种不同的具体类型,则可以通过动态分发的方式处理这些情况,比如使用 trait 对象作为容器中的元素类型[^3]。 最后值得注意的是,除了基本语法外,理解作用域解析运算符(::),可以帮助更好地探索泛型函数和其他高级概念[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值