锈。错误,类型不匹配。发现 std::result::Result

问题描述 投票:-1回答:1

我正在做一个系统,让两个数字相除,如果第二个数字不存在,它就选择第一个数字。下面是代码。

 let new_num: f32 = match num1/num2 {
     Ok(num) => num,
     Err(error) => num1,
 };

然而,它返回。Error: Mismatched types. Expected f32, found std::result::Result 为什么会出现这种情况,我该如何解决?

rust
1个回答
0
投票

表达式 num1/num2 是一个算术除法。给定类型 f32 对于两个变量 num1num2,该表达式的结果类型为 f32 而不是 Result.

例子。

let num1: f32 = 2.0;
let num2: f32 = 3.0;
let new_num: f32 = num1 / num2;

如果你想开发一些逻辑 是可以不存在的,您可以使用 Option. 安 OptionNone 如果该值不存在。

预期行为的例子。

fn main() {
    assert_eq!(2.0, divide_or_get_first(2.0, None));
    assert_eq!(5.0, divide_or_get_first(10.0, Some(2.0)));
}

fn divide_or_get_first(num1: f32, num2: Option<f32>) -> f32 {
    match num2 {
        Some(value) => {
            num1 / value
        }
        None => {
            num1
        }
    }
}

请看。

© www.soinside.com 2019 - 2024. All rights reserved.