2.7 Rust Structs
Posted perfei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.7 Rust Structs相关的知识,希望对你有一定的参考价值。
A struct, or structure, is a custom data type that lets you name and package together multiple related values that make up a meaningful group.
Defining and Instantiating Structs
相比元组,struct中的属性是无序的
To define a struct, we enter the keyword struct
and name the entire struct. A struct’s name should describe the significance of the pieces of data being grouped together. Then, inside curly brackets, we define the names and types of the pieces of data, which we call fields.
struct User { username: String, email: String, sign_in_count: u64, active: bool, }
let user1 = User { email: String::from("[email protected]"), username: String::from("someusername123"), active: true, sign_in_count: 1, };
如果其属性可能被修改,那么其实例必须声明为mut可变类型
let mut user1 = User { email: String::from("[email protected]"), username: String::from("someusername123"), active: true, sign_in_count: 1, }; user1.email = String::from("[email protected]");
Note that the entire instance must be mutable; Rust doesn’t allow us to mark only certain fields as mutable. As with any expression, we can construct a new instance of the struct as the last expression in the function body to implicitly return that new instance.
fn build_user(email: String, username: String) -> User { User { email: email, username: username, active: true, sign_in_count: 1, } }
we can use the field init shorthand syntax to rewrite build_user
so that it behaves exactly the same but doesn’t have the repetition of email
and username
fn build_user(email: String, username: String) -> User { User { email, username, active: true, sign_in_count: 1, } }
Creating Instances From Other Instances With Struct Update Syntax
It’s often useful to create a new instance of a struct that uses most of an old instance’s values but changes some. You’ll do this using struct update syntax.
let user2 = User { email: String::from("[email protected]"), username: String::from("anotherusername567"), active: user1.active, sign_in_count: user1.sign_in_count, };
The syntax ..
specifies that the remaining fields not explicitly set should have the same value as the fields in the given instance.
let user2 = User { email: String::from("[email protected]"), username: String::from("anotherusername567"), ..user1 };
以上是关于2.7 Rust Structs的主要内容,如果未能解决你的问题,请参考以下文章