我正在为一种类型实现
FromStr
,对于错误,我想在包装器结构中返回传递的 &str
。但是,这要求结构体具有 &str
的生命周期限制,但这会在 FromStr
内部导致错误,因为其关联类型 Err
没有任何生命周期限制,也无法修改。最后,不可能将生命周期添加到 impl
,因为生命周期不会受到任何限制,至少在我尝试过的方式中是这样。那么,我怎样才能将我的包装挤入联想类型呢?
有关更多上下文,以下是定义:
pub enum RarityTag {
// ...
}
pub struct ParseRarityTagError<'a>(&'a str);
impl FromStr for RarityTag {
type Err = ParseRarityTagError<'a>;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
// ...
rest => Err(ParseRarityTagError(rest)),
}
}
}
谢谢你
您无法返回生命周期绑定到
FromStr::from_str
为您提供的字符串的错误。这个特性并不是为此而设计的。它必须定义 Err
一个带有生命周期参数的 generic 关联类型才能支持这一点,但事实并非如此。
您需要一个不依赖于生命周期的不同错误方案,或者使用固有方法/自由函数,而不是
FromStr
特征。