看板 Marginalman 關於我們 聯絡資訊
: 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("another@example.com"), ..user1 }; 這樣代表把 email 指定為特定數值 其他都從 user1 搬運(move) 過來 會轉移所有權 所以這行之後 user1 就無法使用了 如果想要 user1 後面有所有權還能使用要用 .clone() let user2 = User { email: String::from("another@example.com"), ..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); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.143.172 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1744944711.A.778.html
oin1104: 大師 04/18 10:58