[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
中的代码