【发布时间】:2017-12-17 21:27:56
【问题描述】:
我正在尝试做一个简单的二次函数,该函数将通过枚举返回根数及其值:
enum QuadraticResult {
None,
OneRoot(f32),
TwoRoots(f32, f32),
}
fn solveQuadratic(a: f32, b: f32, c: f32) -> QuadraticResult {
let delta = b * b - 4.0 * a * c;
match delta {
< 0 => return QuadraticResult::None,
> 0 => return QuadraticResult::TwoRoots(0.0, 1.0),
_ => return QuadraticResult::OneRoot(0.0),
}
}
这不会编译,因为它抱怨“<”和“>”。有没有办法用match实现这个,或者我需要使用if
【问题讨论】:
-
惯用的 Rust 使用
snake_case作为标识符。solve_quadratic不是solveQuadratic。 -
@Shepmaster 好点。幸运的是,在我能够编译它之后,Visual Studio Code 的 rls 插件也为我标记了它。 :)
-
我想您最终会用计算值替换
0.0和1.0。请注意,当返回QuadraticResult::TwoRoots(x, y)时,不要假设x != y。即使d大于 0,-b + d.sqrt()和-b - d.sqrt()也可能相同。 Here's an easy example,但有限根也可能发生。您可能想要返回Option<(x1, x2)>并让调用者决定x1和x2是否“足够接近”以被视为单根。