簡體   English   中英

Rust 在嵌套切片上實現特征的生命周期

[英]Rust lifetimes for implementing a trait on nested slices

我想圍繞(嵌套的)切片創建一個包裝器,以便對不同結構擁有的多維數據進行輕松操作。 我的切片包裝器的可變版本的最基本版本可能如下所示:

struct MySliceMut<'a> {
    data: Vec<&'a mut [f32]>,
}

impl<'a, 'b> MySliceMut<'a> {
    fn get(&'b mut self) -> &'a mut [&'b mut [f32]] {
        self.data.as_mut_slice()
    }
}

現在,如果我想實現一個特征,例如 AddAssign,Rust 似乎不會從實現類型推斷&mut self的生命周期。 編譯器抱怨&mut self可能比'a長:

impl<'a> AddAssign<MySlice<'a>> for MySliceMut<'a> { // lifetime 'a
    fn add_assign(&mut self, rhs: MySlice<'a>) { // lifetime '1
        let a = self.get(); // lifetime may not live long enough, '1 must outlive 'a
        let b = rhs.get();

        // do inplace addition here
    }
}

完整代碼 - Rust 游樂場

我試圖找出生命周期的問題,但找不到。 trait impl 是否需要任何額外的注釋?

struct MySlice<'a> {
    data: Vec<&'a [f32]>,
}

impl<'a, 'b> MySlice<'a> {
    fn get(&'b self) -> &'a [&'b [f32]] {
        self.data.as_slice()
    }
}

您的代碼的問題是fn get(&'b self)返回具有錯誤生命周期的變量。 MySlice<'a>的關聯生命周期'a是內部切片的生命周期。 fn get(...)的關聯生命周期'bself的生命周期。 所以我想 function 可能應該返回&'b [&'a [f32]]而不是。

-- 編輯--

確保更改MySliceMutfn get(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM