rust - 从功能参数实现具有生命周期限制的切片的特征

标签 rust traits borrow-checker

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

// A
trait Get {
    fn get(slice: &[f32]) -> Self;
}

// B
impl Get for () {
    fn get(slice: &[f32]) -> Self {
        ()
    }
}

// C
impl Get for &[f32] {
    fn get(slice: &[f32]) -> Self {
        &slice[0..5]
    }
}
但是,这不起作用,因为借用检查器(正确地)提示外部&[f32]的生存期与slice的生存期不匹配。我如何表达这一点,最好不要改变其特质?
我尝试了以下方法,但没有结果:
// Doesn't work because the function signature differs from the Trait
impl<'a> Get for &'a [f32] {
    fn get(slice: &'a [f32]) -> Self {
        &slice[0..5]
    }
}

// Doesn't work, because the trait bound is not the same as the trait function
impl<'b> Get for &'b [f32] {
    fn get<'a>(slice: &'a [f32]) -> Self where 'a: 'b {
        &slice[0..5]
    }
}

最佳答案

如何在整个Get生命周期内使'a通用:

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]
    }
}

关于rust - 从功能参数实现具有生命周期限制的切片的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66241288/

相关文章:

multithreading - 在 amd64 上拆分堆栈是不必要的

rust - 通过索引修改字符串中的字符

unit-testing - 在运行完所有测试之后,是否可以执行拆解功能?

c++ - 类型特征以识别可以以二进制形式读/写的类型

rust - 如何处理 HashMap 中的每个值并选择性地拒绝一些值?

rust - `Rc`、 `Box`、 `Arc` 的通用指针类型

rust - 我为另一个特征实现了一个特征,但不能从两个特征调用方法

generics - TOML 文档的可链接查询

rust - 使用方法调用结果时的多个可变借用

rust - 当 Rust 中一个值覆盖另一个值时,堆栈上会发生什么?