我是Rust的新手。我如何強制將一個值從內部範圍移到外部而不是借用?如何強制將值從內部範圍移到外部而不是借用?
let mut r_buf = BufReader::new(file.unwrap());
let mut eof = false;
while !eof {
let piece = r_buf.fill_buf();
if piece.is_ok() {
let mut piece = piece.unwrap();
let piece_len = piece.len();
if opt.compress {
let deflated = deflate_bytes(piece);
if deflated.is_none() {
panic!(format!("Cant deflate file {}", path.to_str().unwrap_or("")));
}
let deflate_unwrapped = deflated.unwrap();
let deflate_deref = deflate_unwrapped.deref();
piece = deflate_deref;
}
/* bf: &mut BufStream<File>*/
let w = bf.write(piece);
if w.is_ok() {
written_bytes = w.unwrap();
}
我無法從deflate_deref
移動&[u8]
到piece
。我試過Vec<u8>
和Box<&[u8]>
。我有一個錯誤「deflate_unwrapped壽命不夠長」...我無法操作[u8]
類型,因爲它沒有編譯類型的確切大小,而引用我只能借用...
In這種情況下,我必須使用特定的東西或重寫此代碼?
遊樂場鏈接http://is.gd/u8wfm7
歡迎來到Stack Overflow!由於我們無法編譯您的代碼以獲得相同的錯誤,因此它將非常難以幫助您!請閱讀有關創建[MCVE](http://stackoverflow.com/help/mcve)的信息。在這種情況下,它需要產生你所看到的同樣的錯誤。理想情況下,你可以在[playpen](https://play.rust-lang.org/)上使用某些東西,但如果使用外部包裝箱,這可能很困難。只要儘可能使問題成爲**小**! – Shepmaster 2015-03-31 21:15:28
感謝您的回覆,請將鏈接添加到play.rust-lang.org。我認爲這是更理論上的問題 – Vitaliy 2015-03-31 21:38:13
'foo.deref()'通常寫得更好'&* foo'。你也經常不需要'&*',例如方法調用做autoderef和autoref。 – 2015-04-01 00:58:31