目录

Rust 结构体、方法与错误处理

结构体让你把数据组织成「有意义的对象」,而 Rust 用 Result / Option 把「可能出错」写进类型里,而不是靠异常偷偷崩溃。

定义结构体与方法

struct User {
    name: String,
    age: u32,
}

impl User {
    // 关联函数(类似构造器)
    fn new(name: &str, age: u32) -> User {
        User { name: name.to_string(), age }
    }
    // 方法:第一个参数是 self
    fn greet(&self) -> String {
        format!("你好,我是 {}{} 岁", self.name, self.age)
    }
}

fn main() {
    let u = User::new("小明", 18);
    println!("{}", u.greet());
}

错误处理:Result

可能失败的函数返回 Result<T, E>

use std::num::ParseIntError;

fn parse_age(s: &str) -> Result<u32, ParseIntError> {
    s.parse::<u32>()
}

fn main() {
    match parse_age("20") {
        Ok(age) => println!("年龄 {}", age),
        Err(e) => println!("解析失败: {}", e),
    }
}

? 运算符把「出错就提前返回」写得极简:

fn parse_age(s: &str) -> Result<u32, ParseIntError> {
    let age = s.parse::<u32>()?; // 出错自动 return Err
    Ok(age)
}

可能没有值:Option

fn find_even(nums: &[i32]) -> Option<i32> {
    for &n in nums {
        if n % 2 == 0 { return Some(n); }
    }
    None
}

小结

  • struct + impl 是组织数据与行为的基本单位。
  • Result 表达失败,Option 表达缺失,类型系统逼你处理。
  • ? 是错误传播的语法糖,写库代码离不开。

➡️ 5. 泛型与 Trait