相互借用固定结构的两个字段

时间:2018-12-09 23:40:45

标签: rust borrow-checker borrowing

我正在尝试制作BufReaderLines结构的异步版本,但是我遇到了问题,因为我需要一次可变地借用两个字段。它不需要Pin就可以工作,因为编译器可以识别直接借用的字段,但是当它从Pin上的DerefMut获取引用时就不能这样做。期货Stream特性要求自我类型必须为Pin<&mut Self>,所以我不能只使用普通的自我类型。我如何才能说服编译器这是安全的,还是自己使用unsafe来做到这一点?

这是我的例子:

#![feature(arbitrary_self_types, pin)]
use std::pin::Pin;

pub struct Example {
    a: Vec<u32>,
    b: Vec<u32>,
}

impl Example {
    pub fn next(mut self: Pin<&mut Self>) {
        let a = &mut self.a;
        let b = &mut self.b;
        a.push(b.remove(0));
    }
}

我更复杂的示例需要使用Read来写入切片,因此我需要同时具有对这两个字段的可变引用。

0 个答案:

没有答案