结构体语法

结构体语法

一个结构体由几部分组成:

  • 通过关键字 struct 定义
  • 一个清晰明确的结构体 名称
  • 几个有名字的结构体 字段

有几点值得注意:
1.初始化实例时,每个字段都需要进行初始化
2.初始化时的字段顺序不需要和结构体定义时的顺序一致
需要注意的是,必须要将结构体实例声明为可变的,才能修改其中的字段,Rust 不支持将某个结构体某个字段标记为可变。

当函数参数和结构体字段同名时,可以直接使用缩略的方式进行初始化,跟 TypeScript 中一模一样。
例如:
定义结构体:

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

实例化:

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

语法表明

凡是我们没有显示声明的字段,全部从 user1 中自动获取。需要注意的是 …user1 必须在结构体的尾部使用。(两个结构体有相同的字段的时候,可以通过该方式实现给字符段赋值,需要注意的是该过程中发生了所有权转移,该行为之后,原先结构体中的未转移字段仍可以使用,转移后的不可以)。
把结构体中具有所有权的字段转移出去后,将无法再访问该字段,但是可以正常访问其它的字段。
使用 #[derive(Debug)] 对结构体进行了标记,这样才能使用 println!(“{:?}”, s); 的方式对其进行打印输出

单元结构体

果你定义一个类型,但是不关心该类型的内容, 只关心它的行为时,就可以使用 单元结构体
体的生命周期标注语法跟泛型参数语法很像,需要对生命周期参数进行声明 <'a>。该生命周期标注说明,结构体 ImportantExcerpt 所引用的字符串 str 必须比该结构体活得更久。

struct ImportantExcerpt<'a> {
    part: &'a str,
}

Rust 使用 impl 来定义方法,

struct Circle {
    x: f64,
    y: f64,
    radius: f64,
}
impl Circle {
    // new是Circle的关联函数,因为它的第一个参数不是self
    // 这种方法往往用于初始化当前结构体的实例
    fn new(x: f64, y: f64, radius: f64) -> Circle {
        Circle {
            x: x,
            y: y,
            radius: radius,
        }
    }
// Circle的方法,&self表示借用当前的Circle结构体
fn area(&self) -> f64 {
    std::f64::consts::PI * (self.radius * self.radius)
}

}
使用方法代替函数有以下好处:

  • 不用在函数签名中重复书写 self 对应的类型
  • 代码的组织性和内聚性更强,对于代码维护和阅读来说,好处巨大
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值