Re: [閒聊] Rust: 從入門到入門

作者: yam276 ('_')   2025-04-18 10:51:49
: https://space.bilibili.com/361469957/lists/3902595
: 從入門到入門
1. struct 語法糖
fn build_user(email: String, username: String) -> User {
User {
active: true,
email,
username,
sign_in_count: 1,
}
只要輸入跟 member一樣就不用寫 email: email, 可以只寫 email,
2. struct 複製
let user2 = User {
email: String::from("[email protected]"),
..user1
};
這樣代表把 email 指定為特定數值
其他都從 user1 搬運(move) 過來
會轉移所有權 所以這行之後 user1 就無法使用了
如果想要 user1 後面有所有權還能使用要用 .clone()
let user2 = User {
email: String::from("[email protected]"),
..user1.clone()
};
3. tuple
struct Color(u8, u8, u8); // 定義一個代表 RGB 顏色的 tuple struct
struct Point(i32, i32, i32); // 定義一個 3D 座標點
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Black: {}, {}, {}", black.0, black.1, black.2);
println!("Origin: {}, {}, {}", origin.0, origin.1, origin.2);
}
tuple 的成員沒有名字 所以要用 struct.0, struct.1 來存取
4. Unit-like struct
代表只有命名沒有成員的struct
用法:
(1) 當成 marker
struct Admin;
struct Guest;
fn do_something(user_type: Admin) {
println!("Welcome, Admin!");
}
(2) 實作方法
struct Logger;
impl Logger {
fn log(&self) {
println!("Logging something...");
}
}
fn main() {
let logger = Logger;
logger.log();
}
(3) 跟 enum 搭配
enum Message {
Quit, // Unit-like variant
Move { x: i32, y: i32 }, // Struct-like
Write(String), // Tuple-like
}
5. Derived Trait
#[derive(Debug)]
struct User {
name: String,
}
有很多種 以常用的 Debug 為例
fn main() {
let user1 = User { name: "John".to_string() };
// Debug 的 Derived 讓你可以使用 {:?} 輸出
println!("User {:?}", user1);
// {:#?} 比較優雅的輸出版本 比如輸出 struct 會分段縮排
println!("User {:#?}", user1);
}
作者: oin1104 (是oin的說)   2025-04-18 10:58:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com