【问题标题】:Rust: Error, mismatched types. Found std::result::ResultRust:错误,类型不匹配。找到 std::result::Result
【发布时间】:2020-05-22 19:07:44
【问题描述】:

我正在制作一个系统来划分两个数字,如果第二个数字不存在,它只会选择第一个数字。代码如下:

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

但是,它返回: Error: Mismatched types. Expected f32, found std::result::Result
为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 您能否首先分享一下您如何获得num1num2 的代码?

标签: rust


【解决方案1】:

表达式num1/num2 是算术除法。给定变量num1num2 的类型f32,该表达式的结果类型为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
        }
    }
}

见:

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多