error-handling - 传播错误的正确方法是什么?

标签 error-handling rust

我正在尝试学习 Rust,但在为我的一种类型实现 fmt::Display 特性时遇到了困难。我想做这样的事情:

fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    write!(f, "(");
    some_helper_function(self.t1, self.ctx, f);
    write!(f, " ");
    some_helper_function(self.t2, self.ctx, f);
    write!(f, ")")
}

所有这些函数都返回 fmt::Result,但这将被忽略。错误结果向上传播的正确方式是什么?

最佳答案

对于每个函数调用,您都会检查返回值是否为 Err 对象。如果它是您从函数返回的 Err 对象,如果不是您继续。 标准库中有一个方便的宏,称为 try!正是这样做的。

所以你的代码会变成这样:

fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    try!(write!(f, "("));
    try!(some_helper_function(self.t1, self.ctx, f));
    try!(write!(f, " "));
    try!(some_helper_function(self.t2, self.ctx, f));
    try!(write!(f, ")"))
}

关于error-handling - 传播错误的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412299/

相关文章:

swift - CNContactStore 保存错误

android.database.CursorIndexOutOfBoundsException : Index 0 requested, 大小为 0 数据库错误

php - 如何在 Laravel 5 中处理异常和错误信息?

reference - 有没有办法返回对函数中创建的变量的引用?

rust - 无法将特征方法纳入范围

java - Google App Engine的自定义异常(exception)消息格式-Java

exception - 在 Scala.js 中抛出原生 JS 异常

indexing - 我如何为不存储值本身的类型实现 IndexMut

rust - DataFusion(Apache Arrow): How to lazily read batches of result?

rust - 如何监控reqwest客户端上传进度