【发布时间】:2015-09-04 12:45:02
【问题描述】:
我想创建一个 trait 强制在某些函数上返回 Result<T, E> 类型,但我无法弄清楚定义它的语法。
我已经做到了:
pub type NamedResult<T, E> = Result<T, E>;
pub trait Foo {
fn bar<T, E>(&self) -> NamedResult<T, E>;
}
pub struct Thing;
impl Foo for Thing {
pub fn bar<T, E>(&self) -> NamedResult<T, E> {
Ok(78i32)
}
}
产生以下错误:
error: mismatched types:
expected 'T',
found 'i32'
(expected type parameter, found i32) [E0308]
于是我尝试了:
pub fn bar<i32, String>(&self) -> NamedResult<i32, String> {
Ok(78i32)
}
并收到以下错误:
error: user-defined types or type parameters cannot shadow the primitive types [E0317]
正确的语法是什么,以便我可以强制所述特征的实现者在某些函数上返回 Result<T, E> 类型?
【问题讨论】:
-
为什么是
NamedResult?那部分是一个完整的红鲱鱼。 -
@ChrisMorgan 一开始是
NamedResult<T> = Result<T, Error>,但当我遇到第一批错误时,我就放弃了。