私は錆びた生涯の問題の周りに私の頭をラップしようと怒っています。次のコードを実行している場合:錆のスライスの所有権がそのスコープを超えています
use std::fs::File;
use std::io::Read;
use std::clone::Clone;
const BUFSIZE : usize = 4096;
struct LexBuf<T: Read> {
f: T,
buf: [u8; BUFSIZE],
tail: usize,
head: usize
}
impl <T : Read> LexBuf<T> {
fn fetch(&mut self) {
let keepSize = self.head - self.tail + 1;
let mut tmpBuf;
{
let tmpSlice = &self.buf[self.tail..self.head+1];
tmpBuf = tmpSlice.clone();
}
&mut self.buf[0..keepSize]
.clone_from_slice(tmpBuf);
let mut n = self.f
.read(&mut self.buf[keepSize..]).unwrap();
if n < BUFSIZE - keepSize {
self.buf[keepSize+n] = 0;
}
}
}
を私は事実tmpSlice
は独自のスコープ内にあることを期待して、私はその後self.buf
借りることができますが、それはtmpSlice
のボローことを言うように借りチェッカーが一致していないようですスコープはfn fetch
で終了します。
'clone'は所有しているコピーを作成しません。参照を参照するものではなく、参照先を指定するだけで、' to_owned' –