Rust 从函数参数实现具有生存期限制的切片的特征

Rust 从函数参数实现具有生存期限制的切片的特征,rust,traits,borrow-checker,Rust,Traits,Borrow Checker,在以下代码段中,我尝试实现C: //A 特质获得{ fn getslice:&[f32]>Self; } //B 恳求{ fn getslice:&[f32]->Self{ } } //C impl-Get for&[f32]{ fn getslice:&[f32]->Self{ &切片[0..5] } } 但是,这不起作用,因为借用检查器正确地抱怨外部&[f32]的生存期与切片的生存期不匹配。我如何表达这一点,最好是在不改变特征的情况下 我尝试了以下方法,但没有结果: //不起作用,因为函数签

在以下代码段中,我尝试实现C:

//A 特质获得{ fn getslice:&[f32]>Self; } //B 恳求{ fn getslice:&[f32]->Self{ } } //C impl-Get for&[f32]{ fn getslice:&[f32]->Self{ &切片[0..5] } } 但是,这不起作用,因为借用检查器正确地抱怨外部&[f32]的生存期与切片的生存期不匹配。我如何表达这一点,最好是在不改变特征的情况下

我尝试了以下方法,但没有结果:

//不起作用,因为函数签名与特征不同 impl Self其中的'a:'b{ &切片[0..5] } } 让生命周期内的通用性成为“a:

让生命周期内的通用性成为“a:


是的,理想情况下寻找一种不改变特质的方法,但我怀疑这是不可能的。是的,理想情况下寻找一种不改变特质的方法,但我怀疑这是不可能的。不改变特质是不可能的。如前所述,Get意味着您可以从任何生命周期的[f32]引用中获得自我;对于拥有更长生命的自己来说,这根本是不可能的。如果这就是Get的意思,那么您就不能为&[f32]实现它,类似于您不能为f32实现AsRef;这个类型不支持这样的东西。只是为了我的理解,但是我不也是在C中实现任何生命周期的&[f32]吗?更重要的是,如果不调整性格特征,就无法将未知的两个生命期联系在一起,对吗?有点?这是两种不同的生活方式。对于&'b[f32]中的任何“b”,没有任何约束条件可以使其小到足以小于&'a[f32]中的任何“a”。这并不是因为Rust没有正确的语法来表达某些东西的限制;这违反了Get对于切片引用的实现方法。好吧,我明白了。这就是我想说的,但你设法把它说得更好:谢谢!如果不改变这种特性,就不可能做到这一点。如前所述,Get意味着您可以从任何生命周期的[f32]引用中获得自我;对于拥有更长生命的自己来说,这根本是不可能的。如果这就是Get的意思,那么您就不能为&[f32]实现它,类似于您不能为f32实现AsRef;这个类型不支持这样的东西。只是为了我的理解,但是我不也是在C中实现任何生命周期的&[f32]吗?更重要的是,如果不调整性格特征,就无法将未知的两个生命期联系在一起,对吗?有点?这是两种不同的生活方式。对于&'b[f32]中的任何“b”,没有任何约束条件可以使其小到足以小于&'a[f32]中的任何“a”。这并不是因为Rust没有正确的语法来表达某些东西的限制;这违反了Get对于切片引用的实现方法。好吧,我明白了。这就是我想说的,但你设法把它说得更好:谢谢!
trait Get<'a> {
    fn get(slice: &'a [f32]) -> Self;
}

impl<'a> Get<'a> for () {
    fn get(slice: &'a [f32]) -> Self {
        ()
    }
}

impl<'a> Get<'a> for &'a [f32] {
    fn get(slice: &'a [f32]) -> Self {
        &slice[0..5]
    }
}