Day 1:結構體(Structs)
學習目標
- 定義帶欄位的結構體
- 用結構體建立資料物件
- 理解欄位的所有權類型
今日重點
定義與建立
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let mut user = User {
username: String::from("john"),
email: String::from("john@example.com"),
sign_in_count: 1,
active: true,
};
println!("{} ({})", user.username, user.email);
user.active = false; // 欄位可變(需整個 user 是 mut)
}
建構簡寫(欄位名與變數名相同)
fn make_user(username: String, email: String) -> User {
User {
username, // 等於 username: username
email,
sign_in_count: 1,
active: true,
}
}
其他結構形式
// 元組結構
struct Color(u8, u8, u8);
let black = Color(0, 0, 0);
println!("{}", black.0);
// 單位結構(沒有資料,用於 trait 標記)
struct AlwaysEqual;
練習
struct Book {
title: String,
author: String,
pages: u32,
}
fn main() {
let book = Book {
title: String::from("The Rust Book"),
author: String::from("Steve Klabnik"),
pages: 532,
};
println!("{} by {}, {} pages", book.title, book.author, book.pages);
}
1. 建一個
Book 結構並印出。
2. 用建構簡寫寫一個能建立 Book 的函式。
自我檢查
深入連結
- The Book 第 5 章「Defining and Instantiating Structs」