我有一个功能:
fn foo<i32>(x: i32) -> Result<i32, i32> {
...
}
Run Code Online (Sandbox Code Playgroud)
我想将结果的值提取到一个变量中,无论它是Ok或Err。我可以这样做:
let val = match foo(10) {
Ok(i) => i,
Err(i) => i,
}
Run Code Online (Sandbox Code Playgroud)
想知道是否有一种“更干净”或更“惯用”的方式来这样做,或者这是否是最好的方式。
注意:用例是二分搜索,其中我有一个通用函数,Ok(i)如果找到匹配项,它会返回索引,否则它会返回Err(i)您插入目标以保持数组排序的索引。但是,我不想公开这个通用函数,而是公开两个变体binary_search和binary_search_insert_index。首先,我只是返回iif Ok(i)else None。对于第二个,i无论如何我都会返回。
我最近发现了这个宝石:
let (Ok(my_var)|Err(my_var)) = foo(5);
// Can use `my_var` here.
Run Code Online (Sandbox Code Playgroud)