实施std特性时,如何为生命周期参数设置适当的生命周期

时间:2018-09-24 12:18:35

标签: rust

[EDIT]我不是在寻找在结构上使用from_str()(或构造函数)的解决方案,而是想知道是否有一种方法可以实现某些本机特征而不是“ t获取生命周期参数。

如果没有FromStr,我确实很容易做,但是在某些情况下,如果不实施Trait会导致更复杂/不稳定的解决方案


我正在尝试为使用生命周期参数的结构实现FromStr特征

use std::str::FromStr;

#[derive(Debug)]
struct Test<'s> {
    value: &'s str,
}

impl<'s> Test<'s> {
    fn new(val: &'s str) -> Self {
        Test {
            value: val,
        }
    }
}

impl<'s> FromStr for Test<'s> {
    type Err = ();

    fn from_str(t: &str) -> Result<Test<'s>, Self::Err> {
        Ok(Test {
            value: t,
        })
    }
}

fn main() {
    let t1 = Test::new("test 1");
    let t2 = Test::from_str("test 2");

    println!("Test 1 = {:?}", &t1);
    println!("Test 2 = {:?}", &t2);
}

同样,它无法编译(正确地如此),并且出现以下编译错误:

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'s` due to conflicting requirements

因此,我试图像这样向from_str()函数添加生存期要求:

fn from_str<'t: 's>(t: &'t str) -> Result<Self, Self::Err> { ... }

但是我又遇到了另一个编译器错误(我也很理解)

error[E0195]: lifetime parameters or bounds on method `from_str` do not match the trait declaration

我只是不能实现特征并将方法添加到结构的实现中,但我想知道它是否存在通过实现特征来做事的方法?

PS:链接到playground

中的代码

0 个答案:

没有答案