Rust 结构体

作者: kaiv2 | 来源:发表于2020-03-21 21:41 被阅读0次

使用结构体组织相关的数据

定义并实例化结构体

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

fn main() {
    let mut user1 = User {
        usernaem: String::from("someusername"),
        emain: String::from("someone@example.com"),
        active: true,
        sign_in_count: 1,
    };
    user1.email = String::from("one&example.com");
}

定义结构体需要使用struct关键字并为整个结构体提供一个名字。接着在大括号中,定义每一部分数据的名字和类型,我们成为字段

创建结构体实例,通过为每个字段指定具体值来创建这个结构体的 实例

我们可以在函数的最后一个表达是中构造一个结构体的新实例,来隐式地返回这个实例。

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

为函数参数起与结构体自相同的名字是可以理解的,但是不得不重复emailusername字段名与变量名有些啰嗦。

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

使用结构体更新语法重其他实例创建实例

let user1 = User {
    email: String::from("some@example.com"),
    username: String::from("zhang"),
    active: true,
    sign_in_count: 1,
};
let user2 = User {
    email: String::from("abc@example.com"),
    username: String:from("li"),
    active: user1.active,
    sign_in_count: user1.sign_in_count,
};

使用结构体更新语法,我们可以通过更少的代码来达到相同的效果。

let user2 = User {
    emain: String:from("abc@example.com"),
    username: String::from("li"),
    ..user1
};

使用没有名字字段的元组结构体来创建不同的类型

也可以定义与元组类似的结构体,称为元组结构体

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);

没有任何字段的类单元结构体

我们也可以定义一个没有任何字段的结构体!它们被称为单元结构体因为他们类似于(),即unit类型。

使用结构体的示例程序

#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}
fn main() {
    let rect1 = Rectangle {width: 12, height: 24};
    
    println!("{}", area(&rect1));
}

fn area(rec: &Rectangle) {
    rectangle.width * rectangle.height
}

相关文章

  • Rust 结构体

    使用结构体组织相关的数据 定义并实例化结构体 定义结构体需要使用struct关键字并为整个结构体提供一个名字。接着...

  • rust结构体的使用

    rust的结构体使用有点特别的地方,所有权比较麻烦。结构体的定义比较普通 使用结构体成员name 必须添加clon...

  • Rust语言编程实例100题-050

    Rust语言编程实例100题-050 题目:在 Rust 中,模块 Module 用于将函数或结构体按照功能分组。...

  • Rust语言教程(7) - 结构体与方法的结合

    Rust语言教程(7) - 结构体与方法的结合 上一节我们学习了结构体类型,但是只介绍了定义域,并没有介绍定义方法...

  • 2020 Rust 入门结构体方法

    最近学习无人驾驶,在无人驾驶中用到最多语言是 cpp 这样相对底层语言。那么我们除了 cpp 现在多了 rust ...

  • Rust 闭包学习 (Fn/FnMut/FnOnce)

    学习 Rust 闭包记录 闭包作为参数 闭包作为结构体属性 异步使用闭包 主要就是加 Send trait,没加 ...

  • Rust 从基础到实践(7) borrow 和 referenc

    上一次我们 Rust 的内存分配,今天通过实例给大家介绍一下。这里定义 Person 的结构体,然后实例化赋值后并...

  • Rust语言学习小记(结构体、枚举)

    3. 结构体 3.1 结构提可变性:结构体不能单独声明某个字段的可变性,只能声明整个实例的可变性。 3.2 各种赋...

  • Rust Option 模式匹配简介

    Option Option是rust非常好用的数据结构,用来解决 Null 空指针问题,是rust安全基石重要一环...

  • 结构体

    [toc] 结构体的定义方式 先定义结构体类型,再定义结构体变量 定义结构体类型的同时定义结构体变量 定义结构体类...

网友评论

    本文标题:Rust 结构体

    本文链接:https://www.haomeiwen.com/subject/xfjuyhtx.html