为什么呢?操作员报告错误“特征已绑定NoneError:不满足错误”?

奋斗学习者

9行?运算符工作正常,但是如果我在第19行的相同类型上使用相同的逻辑,则会炸毁。

use std::error::Error;
use walkdir::WalkDir;

fn main() -> Result<(), Box<dyn Error>> {
    let valid_entries = WalkDir::new("/tmp")
        .into_iter()
        .flat_map(|e| e)
        .flat_map(|e| {
            let name = e.file_name().to_str()?; // <-- this works
            if name.contains(".txt") {
                Some(e)
            } else {
                None
            }
        });

    for entry in valid_entries {
        println!("This file matches: {:?}", entry);
        let name_to_str = entry.file_name().to_str()?; // <-- this blows up
        // ...
    }
    Ok(())
}

这些错误让我难以理解:

error[E0277]: the trait bound `std::option::NoneError: std::error::Error` is not satisfied
  --> src/main.rs:19:53
   |
26 |         let name_to_str = entry.file_name().to_str()?;
   |                                                     ^ the trait `std::error::Error` is not implemented for `std::option::NoneError`
   |
   = note: required because of the requirements on the impl of `std::convert::From<std::option::NoneError>` for `std::boxed::Box<dyn std::error::Error>`
   = note: required by `std::convert::From::from`

为什么?运算符在迭代时会炸毁valid_entries

罗德里戈

?可用于检查和回报的任何类型的工具的Try特征(仍然不稳定)。其中的唯一实现stdOption<T>Result<T, E>(以及一些Future与本讨论无关的相关暗示)。这意味着您可以?在返回Result<T, E>或的任何函数中使用运算符Option<T>

但是您不能对它们进行n匹配。也就是说,如果函数返回a Result<T, E>,则不能使用?in的type值Option<T>或相反亦然。

您的第一个?作品是因为您在一个flat_map()可以返回Option<String>并且一切顺利的内部但是,第二个函数在返回a的函数中,Result<(), Box<dyn Error>>因此您不能将其?与一起使用Option<String>

解决方案就是以另一种方式处理NoneOption<String>的问题:

  1. 进行match/if let Some(x)分别处理错误。
  2. 转换为Result<String, Error>和使用?,例如与.ok_or(std::io::ErrorKind::InvalidData)?;
  3. 与2类似,但要利用impl From<&str> for Box<dyn Error>和做.ok_or("invalid file name")
  4. 使用Option::unwrap_or()或相似的默认值
  5. unwrap()并惊慌None

好的,但是这个错误是什么意思呢?这个想法是,实际上,只要您实现您就可以使用返回a的?an 不幸的是,它仍然也是不稳定的,因此您不能使用稳定的编译器在代码中实现不过,您的代码中的是,只要实现编译器很乐意进行装箱,但是...Option<T>Result<T, E>EFrom<std::option::NoneError>NoneErrorFrom<NoneError>EBox<dyn Error>NoneErrorError

error[E0277]: the trait bound `std::option::NoneError: std::error::Error` is not satisfied

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么即使不满足条件,循环也会中断并出现错误?

来自分类Dev

Rust Diesel:不满足特征绑定`NaiveDateTime:Deserialize <'_>`

来自分类Dev

不满足特征绑定`T:std :: fmt :: Display`

来自分类Dev

如果不满足条件,则引发错误,如果不满足,则运行过程

来自分类Dev

为什么我有这个错误使操作员超载?

来自分类Dev

为什么返回类型不满足方法签名?

来自分类Dev

为什么由于缺少类型注释而收到错误“无法满足特征绑定的FromStr”?

来自分类Dev

Oracle SQL:UPDATE,但如果不满足条件,则抛出“错误”

来自分类Dev

控制台中不满足条件的错误

来自分类Dev

为什么“语义错误TS2344:类型'“ ptn3”'不满足约束'“ ptn1” | “ ptn2””。

来自分类Dev

通过闭包时,不满足特征绑定`std :: io :: Write +'static:std :: marker :: Sized`

来自分类Dev

无法访问Iron中的参数,因为特征绑定的plugin :: Plugin <iron :: Request>不满足

来自分类Dev

使用PhantomData <T>时,不满足特征绑定`T:std :: default :: Default`

来自分类Dev

TelephonyManager获取操作员名称错误

来自分类Dev

矛盾错误消息-操作员超载<<

来自分类Dev

Prolog代码错误(需要操作员)

来自分类Dev

Scala:继承的枚举对象不满足父级特征

来自分类Dev

配置:错误:不满足软件包要求(libcanberra-gtk3> = 0.10)[但已安装libcanberra-gtk3 v。0.30]

来自分类Dev

“不满足”条件

来自分类Dev

如果字符串包含子字符串,为什么我的条件不满足?

来自分类Dev

为什么我的 Result 类型别名不满足 failure::Fail trait bound?

来自分类Dev

当条件不满足时,为什么我的代码在我的 while 循环中运行?

来自分类Dev

尽管不满足 && 条件,为什么这个 if 语句会给出输出?

来自分类Dev

Angular 8:为什么不满足对等依赖@angular/[email protected]

来自分类Dev

如果数量匹配,为什么我的 Pod 不满足资源配额限制?

来自分类Dev

防止Python在不满足条件的if语句中检查语法错误

来自分类Dev

错误:使用Julia时,检测到包装的要求不满足

来自分类Dev

Azure Blob错误:StorageException:不满足使用HTTP条件标头指定的条件

来自分类Dev

React Navigation + TypeScript错误:类型'EventStackParams'不满足约束'Record <string,object | 未定义>

Related 相关文章

  1. 1

    为什么即使不满足条件,循环也会中断并出现错误?

  2. 2

    Rust Diesel:不满足特征绑定`NaiveDateTime:Deserialize <'_>`

  3. 3

    不满足特征绑定`T:std :: fmt :: Display`

  4. 4

    如果不满足条件,则引发错误,如果不满足,则运行过程

  5. 5

    为什么我有这个错误使操作员超载?

  6. 6

    为什么返回类型不满足方法签名?

  7. 7

    为什么由于缺少类型注释而收到错误“无法满足特征绑定的FromStr”?

  8. 8

    Oracle SQL:UPDATE,但如果不满足条件,则抛出“错误”

  9. 9

    控制台中不满足条件的错误

  10. 10

    为什么“语义错误TS2344:类型'“ ptn3”'不满足约束'“ ptn1” | “ ptn2””。

  11. 11

    通过闭包时,不满足特征绑定`std :: io :: Write +'static:std :: marker :: Sized`

  12. 12

    无法访问Iron中的参数,因为特征绑定的plugin :: Plugin <iron :: Request>不满足

  13. 13

    使用PhantomData <T>时,不满足特征绑定`T:std :: default :: Default`

  14. 14

    TelephonyManager获取操作员名称错误

  15. 15

    矛盾错误消息-操作员超载<<

  16. 16

    Prolog代码错误(需要操作员)

  17. 17

    Scala:继承的枚举对象不满足父级特征

  18. 18

    配置:错误:不满足软件包要求(libcanberra-gtk3> = 0.10)[但已安装libcanberra-gtk3 v。0.30]

  19. 19

    “不满足”条件

  20. 20

    如果字符串包含子字符串,为什么我的条件不满足?

  21. 21

    为什么我的 Result 类型别名不满足 failure::Fail trait bound?

  22. 22

    当条件不满足时,为什么我的代码在我的 while 循环中运行?

  23. 23

    尽管不满足 && 条件,为什么这个 if 语句会给出输出?

  24. 24

    Angular 8:为什么不满足对等依赖@angular/[email protected]

  25. 25

    如果数量匹配,为什么我的 Pod 不满足资源配额限制?

  26. 26

    防止Python在不满足条件的if语句中检查语法错误

  27. 27

    错误:使用Julia时,检测到包装的要求不满足

  28. 28

    Azure Blob错误:StorageException:不满足使用HTTP条件标头指定的条件

  29. 29

    React Navigation + TypeScript错误:类型'EventStackParams'不满足约束'Record <string,object | 未定义>

热门标签

归档