答案解析:
答案:正确
Result
T是成功情况下Ok(T)中包含的值类型,E是失败情况下Err(E)中包含的错误类型。
这种设计强制开发者显式处理错误情况。
答案解析:
答案:?
?操作符是Rust中的错误传播操作符,用于简化错误处理。
如果Result是Ok(value),则返回value;如果是Err(error),则提前返回Err(error)。
这大大减少了手动match Result的样板代码。
答案解析:
答案:Some(T) 和 None
Option
Some(T)表示存在值T,None表示没有值。
这避免了空指针异常,是Rust安全性的重要组成部分。
答案解析:
答案:错误
panic!可以通过std::panic::catch_unwind函数捕获。
不过panic!主要用于不可恢复的错误,通常表示程序逻辑错误。
在大多数情况下,应该使用Result来处理可恢复的错误。
答案解析:
答案:unwrap()
unwrap()方法会返回Ok中的值,如果是Err则调用panic!。
类似的还有expect(msg),可以提供自定义的panic消息。
在生产代码中应谨慎使用,更推荐使用模式匹配或?操作符。
答案解析:
答案:unwrap_or, map(或其他合理答案)
unwrap_or(default):如果是Some(T)返回T,如果是None返回默认值。
map(f):如果是Some(T)则应用函数f得到Some(f(T)),如果是None保持None。
其他常用方法还有:unwrap_or_else, and_then, or_else等。
答案解析:
答案:fn foo() -> Result
Result
Option
这种显式的错误处理是Rust安全性的重要特征。
答案解析:
答案:错误
虽然Rust鼓励显式错误处理,但可以使用let _ = 来忽略Result。
编译器会对未使用的Result发出警告,但不是编译错误。
可以使用#[must_use]属性强制要求处理某些类型的返回值。
答案解析:
答案:实现std::error::Error trait
实现Error trait提供了标准的错误处理接口。
这样的错误类型可以与其他Rust错误处理工具很好地集成。
通常还会实现Display和Debug trait来提供错误信息。
答案解析:
答案:程序逻辑错误(或类似表述)
panic!适用于不可恢复的错误,特别是程序逻辑错误。
例如:数组越界、除零、断言失败等情况。
这些错误通常表示程序存在bug,应该修复代码而不是处理错误。
而Result适用于可预期的、可恢复的错误,如文件不存在、网络连接失败等。