面试题答案
一键面试在Rust中,可以通过在 calculate
方法的返回值中使用 Result
类型来处理可能出现的错误。Result
类型是一个枚举,有两个变体:Ok(T)
表示操作成功,包含返回值 T
;Err(E)
表示操作失败,包含错误信息 E
。
以下是一个简单的代码示例:
// 定义错误类型
#[derive(Debug)]
struct MathError;
// 定义trait
trait MathOperation {
fn calculate(&self) -> Result<i32, MathError>;
}
// 实现trait
struct AddOperation {
a: i32,
b: i32,
}
impl MathOperation for AddOperation {
fn calculate(&self) -> Result<i32, MathError> {
// 这里简单返回加法结果,假设不会出错
Ok(self.a + self.b)
}
}
struct DivideOperation {
a: i32,
b: i32,
}
impl MathOperation for DivideOperation {
fn calculate(&self) -> Result<i32, MathError> {
if self.b == 0 {
Err(MathError)
} else {
Ok(self.a / self.b)
}
}
}
fn main() {
let add = AddOperation { a: 2, b: 3 };
let add_result = add.calculate();
match add_result {
Ok(result) => println!("Addition result: {}", result),
Err(error) => println!("Addition error: {:?}", error),
}
let divide = DivideOperation { a: 10, b: 2 };
let divide_result = divide.calculate();
match divide_result {
Ok(result) => println!("Division result: {}", result),
Err(error) => println!("Division error: {:?}", error),
}
let divide_by_zero = DivideOperation { a: 10, b: 0 };
let divide_by_zero_result = divide_by_zero.calculate();
match divide_by_zero_result {
Ok(result) => println!("Division result: {}", result),
Err(error) => println!("Division error: {:?}", error),
}
}
在上述代码中:
- 定义了
MathError
作为错误类型。 - 定义了
MathOperation
trait,其中calculate
方法返回Result<i32, MathError>
。 - 分别为
AddOperation
和DivideOperation
结构体实现了MathOperation
trait,AddOperation
的calculate
方法简单返回加法结果,DivideOperation
的calculate
方法在除数为0时返回错误。 - 在
main
函数中,分别对加法和除法操作进行调用,并通过match
语句处理Result
结果。