我正在尝试学习 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/