定义关联类型的生命周期而没有生命周期限制

问题描述 投票:0回答:1

我正在为一种类型实现

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)),
        }
    }
}

谢谢你

rust lifetime
1个回答
0
投票

您无法返回生命周期绑定到

FromStr::from_str
为您提供的字符串的错误。这个特性并不是为此而设计的。它必须定义
Err
一个带有生命周期参数的 generic 关联类型才能支持这一点,但事实并非如此。

您需要一个不依赖于生命周期的不同错误方案,或者使用固有方法/自由函数,而不是

FromStr
特征。

© www.soinside.com 2019 - 2024. All rights reserved.