我是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