如果结果在向量中,如何获取结果的Ok值?

Pahlevi Fikri Auliya
#[derive(Debug)]
struct S{}

#[derive(Debug)]
struct E{}

fn test() -> Result<S, E> {
    let data_1: Result<S, E> = Ok(S{});
    let data_2: Result<S, E> = Err(E{});
    let v: Vec<Result<S, E>> = vec![data_1, data_2];

    for i in 1..2 {
        for item in &v {
            let val = item?; //error
            println!("{:?}", val);
        };
    }

    Ok(S{})
}

在上面的代码中,如果Result确定,我想打印项目的值(否则返回Err)。但是(*item)?部分由于将值移到共享引用后面而导致错误

[rustc E0507] [E]无法移动*item到共享引用移动的后面,因为它*item具有type std::result::Result<tests::S, tests::E>,但没有实现Copy特征

我曾尝试克隆数据,但不能解决问题。此外,克隆听起来不正确。

正确的解决方法/最佳做法是什么?

阿洛索

可以格式化引用(例如&S)。但是,?操作员需要在Result中返回错误,因此您必须复制,克隆或移动它:

复制

如果Copy为您的类型实现特征,则可以取消引用&Result<S, E>游乐场):

#[derive(Debug, Copy, Clone)]
struct S {}

#[derive(Debug, Copy, Clone)]
struct E {}

如果实现了错误类型Copy,但也不能使ok类型(操场实现则也可以使其工作

克隆

如果需要将引用转换为not的拥有类型,则必须克隆类型Copy示例(操场):

#[derive(Debug, Clone)]
struct S {}

#[derive(Debug, Clone)]
struct E {}

let val = item.clone()?;

您可以将其更改为仅在出现错误的情况下进行克隆(Playground):

#[derive(Debug)]
struct S {}

#[derive(Debug, Clone)]
struct E {}

let val = item.as_ref().map_err(Clone::clone)?;

移动

如果迭代后不需要向量,则可以移动它:

for item in v {  // this calls `IntoIterator::into_iter(v)` implicitly
    let val = item?;
    println!("{:?}", val);
}

或者,您可以将转换Vec<Result<S, E>>Result<Vec<S>, E>第一个:

// collects the `Ok` values, or returns the first error it encounters
let v: Vec<S> = v.into_iter().collect::<Result<_, _>>()?;

for item in &v {
    println!("{:?}", item);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从结果值中获取原始值

如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

如果我有多个具有相同值的行,如何从mysql结果中获取单个值

如何从R中for循环的迭代结果获取向量?

如果列中无结果,则获取0值-MySQL

如果在Jquery Autocomplete和Django中不是唯一的结果,如何仅显示一个结果

如果在超类中定义了方法,则如何根据调用该对象的对象更改结果

如果在db查询中没有返回结果,如何显示消息

如果在Postgres中抽签,如何显示所有结果?

如果在 Angular 中找不到结果,如何隐藏组件

从 AWS Athena 获取的结果在时间戳列中具有不同的值

如果在同一查询中的另一结果行中满足条件,是否有办法减少一个结果行中的值

从结果中获取最大值,该结果在SQL Server中的group by子句中包含不同的字符串值

如何在 Rust 中划分结果向量?

numpy:如何从argmax结果中获取最大值

我如何在StringPattern值birdantantcatbirdcat中获取String结果

如何从以列表为值的字典中获取结果

如何从 JSF 中的 javascript 函数获取 h:link 的结果值?

如何在结果中获取 XMLHttpRequest 的属性值

如何从powershell命令的结果中获取特定属性的值

如何从存储过程中获取结果作为值?

如何从获取数组结果中检索单选按钮的选定值..?

如果在jQuery中单击该行中的复选框,如何获取行的值

Swifui:MacOS App:在ContentView中获取核心数据OK,但是如何使用AppDelegate的结果?

如何从结果中获取值?

如何从数组中获取结果?

DISTINCT结果在mysql中

如果在ios8中使用搜索栏找不到结果,如何隐藏节标题

如何使用查询结果在laravel中查询更多信息?