【发布时间】:2019-02-25 14:00:47
【问题描述】:
我有一个类型 Foo,其方法可能会“引发”关联类型 Foo::Err 的错误。
pub trait Foo {
type Err;
fn foo(&mut self) -> Result<(), Self::Err>;
}
我有另一个特征Bar,其方法旨在处理Foo。 Bar 可能会发出自己的错误(由关联类型 Bar::Err 指定),但它也可能遇到由正在处理的 Foo 生成的错误。
我可以看到两种方法来做到这一点,但我不知道哪种方法最适合 Rust。
第一个在结果中嵌入结果:
pub trait Bar1 {
type Err;
fn bar<F: Foo>(&mut self, foo: F) -> Result<Result<F, F::Err>, Self::Err>;
}
第二个将两种错误类型合并到一个专用的枚举中:
pub trait Bar2 {
type Err;
fn bar<F: Foo>(&mut self, foo: F) -> Result<F, Choice<F::Err, Self::Err>>;
}
第二个在语义上看起来更清晰,但为处理额外的枚举带来了一些障碍。
【问题讨论】:
标签: error-handling rust idioms