楼主:
yam276 ('_')
2025-04-28 15:51:27: 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,
//