作者yam276 (史萊哲林的優等生)
看板Marginalman
標題Re: [閒聊] Rust: 從入門到入門
時間Mon Apr 28 15:51:27 2025
: 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://webptt.com/m.aspx?n=bbs/Marginalman/M.1745826689.A.1ED.html