从 Result<T, T> 获取值 T

Jay*_*ody 1 rust

我有一个功能:

fn foo<i32>(x: i32) -> Result<i32, i32> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想将结果的值提取到一个变量中,无论它是OkErr。我可以这样做:

let val = match foo(10) {
    Ok(i) => i,
    Err(i) => i,
}
Run Code Online (Sandbox Code Playgroud)

想知道是否有一种“更干净”或更“惯用”的方式来这样做,或者这是否是最好的方式。

注意:用例是二分搜索,其中我有一个通用函数,Ok(i)如果找到匹配项,它会返回索引,否则它会返回Err(i)您插入目标以保持数组排序的索引。但是,我不想公开这个通用函数,而是公开两个变体binary_searchbinary_search_insert_index。首先,我只是返回iif Ok(i)else None。对于第二个,i无论如何我都会返回。

Ang*_*ros 5

我最近发现了这个宝石:

let (Ok(my_var)|Err(my_var)) = foo(5);
// Can use `my_var` here.
Run Code Online (Sandbox Code Playgroud)