- 错误发生阶段:
- 这段代码会在运行时出错。因为
"hello"
不能被解析为i32
类型。parse
方法在编译时不会因为字符串内容不能解析而报错,它只是尝试在运行时进行解析。
- 修改代码:
fn main() {
let result: Result<i32, _> = "hello".parse();
match result {
Ok(num) => println!("The number is: {}", num),
Err(e) => println!("Error: {}", e),
}
}
fn main() {
let num: i32 = "hello".parse().unwrap_or(0);
println!("The number is: {}", num);
}
- 也可以使用
expect
方法,它和unwrap
类似,但可以自定义错误信息:
fn main() {
let num: i32 = "hello".parse().expect("Failed to parse string to i32");
println!("The number is: {}", num);
}
- 不过
expect
和unwrap
一样,如果解析失败还是会导致程序崩溃,只是expect
能提供更有意义的错误信息,而使用match
或unwrap_or
能更好地控制错误处理逻辑。