MST
星途 面试题库

面试题:Rust编译时错误处理之类型不匹配

在Rust中,有如下代码:```rustfn main() { let num: i32 = "hello".parse().unwrap(); println!("The number is: {}", num);}``` 这段代码会在编译时还是运行时出错?为什么?如何修改代码来正确处理这个错误?
19.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 错误发生阶段
    • 这段代码会在运行时出错。因为"hello"不能被解析为i32类型。parse方法在编译时不会因为字符串内容不能解析而报错,它只是尝试在运行时进行解析。
  2. 修改代码
    • 可以使用Result类型来正确处理错误,如下:
fn main() {
    let result: Result<i32, _> = "hello".parse();
    match result {
        Ok(num) => println!("The number is: {}", num),
        Err(e) => println!("Error: {}", e),
    }
}
  • 或者使用unwrap_or方法来提供一个默认值:
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);
}
  • 不过expectunwrap一样,如果解析失败还是会导致程序崩溃,只是expect能提供更有意义的错误信息,而使用matchunwrap_or能更好地控制错误处理逻辑。