Rust 结构体

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

定义并实例化结构体

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
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容