看板 Marginalman 關於我們 聯絡資訊
: https://space.bilibili.com/361469957/lists/3902595 : 從入門到入門 1. Display Display 是給使用者看的漂亮輸出,不能 derive,需要自己實作 use std::fmt; struct User { name: String, age: u8, } impl fmt::Display for User { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} ({})", self.name, self.age) } } fn main() { let user = User { name: "Ayano".into(), age: 18, }; println!("{}", user); // 呼叫的是 Display! } 2. enum 可以持有不同的副類型 fn enum_test() { enum IpAddrKind { V4(u8, u8, u8, u8), V6(String), } let home = IpAddrKind::V4(127, 0, 0, 1); let loopback = IpAddrKind::V6(String::from("IPv6::IP")); } 你也可以替 enum 實現方法: enum Message { // ... } impl Message { fn call(&self) { // ... } } 3. Option Enum enum Option<T> { None, Some(T), } 來自標準庫的東西 Option 與其變體都定義在 Prelude 裡面 這就是 Rust 用來表達 nullptr 與否的方法 例子: fn option_test() { let x: i8 = 5; let y: Option<i8> = Some(5); let sum = x + y; } 這樣不會過編譯,因為這邊 y 是可能為 none 的 Option<i8> 4. enum可以單獨持有值 以下讓 enum Coin 的 Quarter(25美分) 單獨取得 enum UsState 的數值 #[derive(Debug)] enum UsState { Alabama, Alaska, // --snip-- } enum Coin { Penny, Nickel, Dime, Quarter(UsState), } fn value_in_cents(coin: Coin) -> u8 { match coin { Coin::Penny => 1, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter(state) => { println!("{:?}", state); 25 } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.143.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1745826689.A.1ED.html