当前位置: 首页 > 知识库问答 >
问题:

什么是铁锈包装的,它是用来做什么的?

柯捷
2023-03-14

我有一个使用的代码。展开()

fn main() {
    let paths = std::fs::read_dir("/home/user").unwrap();

    for path in paths {
        println!("Name: {}", path.unwrap().path().display());

    }
}

查看展开的定义后,

pub fn unwrap(self) -> T {
  match self {
        Ok(t) => t,
        Err(e) => unwrap_failed("called `Result::unwrap()` on an `Err` value", e),
    }
}

还有read_dir的签名

pub fn read_dir<P: AsRef<Path>>(path: P) -> io::Result<ReadDir>

我对unwrap返回传入ResultT类型的理解是否正确?


共有1个答案

李博达
2023-03-14

在Rust中,当您有一个可能返回T或失败的操作时,您将有一个Result类型的值

函数<代码>展开(自)-

当你确信自己没有错误时,最好使用它。如果不是这样,通常最好是模式匹配错误或使用 尝试 操作员转发错误。

在您的示例中,调用read_dir()将返回一个io::Result

试试看 应该是这样的:

fn try_main() -> std::io::Result<()> {
    let entries = std::fs::read_dir("/home/user")?;

    for entry in entries {
        println!("Name: {}", entry?.path().display());

    }
    Ok(())
}

fn main() {
    let res = try_main();

    if let Err(e) = res {
        println!("Error: {}", e);
    }
}

查看如何检查每个错误案例。

(更新为使用而不是尝试!().宏仍然可以工作,但是是新代码的首选)。

 类似资料:
  • 我一直在努力学习什么是EJB bean,这意味着他们的实例在池中被管理,等等。真的不能很好地掌握它们。 你能给我解释一下它们到底是什么吗(实际上对于一个Java程序员来说)?他们是做什么的?他们的目的是什么?为什么要真正使用它们?(为什么不坚持?)也许是一个示例应用程序? 请仅参考更新的信息,即。关于EJB的过时信息可能具有误导性。 对于EJB学习初学者,请注意: EJB基于分布式对象,这是指运行

  • 对数据库进行查询和修改操作的语言叫做 SQL(Structured Query Language,结构化查询语言)。SQL 语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。 著名的大型商用数据库 Oracle、DB2、Sybase、SQL Server,开源的数据库 PostgreSQL、MySQL,甚至一些小型的数据库 Access 等都支持 SQL。近些年蓬勃发展的 NoS

  • 问题内容: 我对中的功能有些困惑。例如,为什么下面的试验(一致地)执行它们的工作? 我找不到关于此的好的文档。 问题答案: 伪随机数生成器通过对值执行某些运算来工作。通常,此值是生成器生成的先前编号。但是,第一次使用生成器时,没有先前的值。 播种伪随机数生成器会为其提供第一个“上一个”值。每个种子值将对应于给定随机数生成器的一系列生成值。也就是说,如果两次提供相同的种子,则两次获得相同的数字序列。

  • 我是一个Android开发的新手。什么是android.jar?我指的是https://developer.android.com/guide/platform/?nav=true并试图理解它适合哪个层。我听到了相互矛盾的意见,现在真的很困惑,考虑到我在Android方面的有限知识。谢谢!

  • 本文向大家介绍你有了解Rxjs是什么吗?它是做什么的?相关面试题,主要包含被问及你有了解Rxjs是什么吗?它是做什么的?时的应答技巧和注意事项,需要的朋友参考一下 RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extra

  • 我可以想到许多地方,C语言中的联合有助于节省内存。因为Rust是一种系统编程语言,为什么它不支持联合呢?