我正在尝试制作BufReader
和Lines
结构的异步版本,但是我遇到了问题,因为我需要一次可变地借用两个字段。它不需要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
来写入切片,因此我需要同时具有对这两个字段的可变引用。