Rust-结构体

Rust-结构体

结构体是一种可支持我们进行自定义的数据类型,它允许我们可以把多个相关联的值进行打包,组成一个有意义的组合,并取一个新的名字。

一、结构体语法

1. 如何定义一个结构体?

  1. 使用struct关键字,并为整个结构体进行命名。
  2. 在花括号内,为所有成员字段定义名称和类型。
  3. 每个成员字段以逗号进行分隔,即使是最后一个成员也需要如此。

例如, 以下结构体定义了某网站的用户:

struct User {
   
    active: bool,
    username: String,
    email: String,
    sign_in_count: u64,
}

该结构体名称是 User,拥有 4 个字段,且每个字段都有对应的字段名及类型声明,例如 username 代表了用户名,它是 String 类型。

2. 如何使用一个结构体?

想要使用结构体,就需要先创建结构体的实例:

  • 为每个字段指定具体的值,不多不少。

  • 无需按照声明的顺序进行指定

let user1 = User {
   
        email: String::from("someone@example.com"),
        username: String::from("someusername123"),
        active: true,
        sign_in_count: 110,
    };

3. 如何取得结构体里面的某个值?

通过.​操作符即可访问结构体实例内部的字段值,也可以修改它们(修改要在创建结构体实例时使用mut​):

let mut user1 = User {
   
        email: String::from("someone@example.com"),
        username: String::from("someusername123"),
        active: true,
        sign_in_count: 1,
    };

    user1.email = String::from("anotheremail@example.com"); //赋新值

注意:一旦 struct 的实例是可变的(mut​),那么实例中所有的字段都是可变的。Rust 不支持将结构体中的特定字段标记为可变而其他字段却不可变。

4. 简化结构体创建

​简化结构体创建的操作用到了函数,这利用了“struct也可作为函数的返回值”的特性。

以下面的函数为例,它接收两个字符串参数: email 和 username,然后使用它们来创建一个 User 结构体,并且返回了 User 结构体的实例:

fn build_user(email:String, username:String) -> User{
   
	User{
   
		emali: email,
		username: username,
		active: true,
		sign_in_count: 112,
	}
}

5. 字段初始化简写

这是一个小tip,当结构体字段名与字段值对应变量名相同时,Rust支持使用字段初始化简写的方式:

fn build_user(email:String, username:String) -> User{
   
	User{
   
		emali,
		username,
		active: true,
		sign_in_count: 112,
	}
}

6. struct更新语法

在实际场景中,有一种情况很常见:根据已有的结构体实例,创建新的结构体实例,例如根据已有的 user1 实例来构建 user2。

当你想要基于某个现有的struct实例来创建一个新实例的时候,在这种情况下,新实例中某些字段的值可能和现有的实例是相同的,而其他的字段和现有的实例可能存在不一样的情况。

我们想要实现这个效果,会这么做:

let user1 = User {
   
        email: String::from("someone@example.com"),
        username: String::from("someusername123")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值