You could use vec::from_slice [1] to convert a slice to a unique vector, although for really performance sensitive work this may not be desirable because it introduces an extra copy.
The better option is probably to see if it's possible to rewrite TcpSocket.write to use &[u8] instead. I'd be surprised if there are serious issues; it was probably just written that way before slices were in common usage. -Eric [1]: http://dl.rust-lang.org/doc/core/vec.html#function-from_slice On Dec 20, 2012, at 6:19 PM, Michael Neumann <[email protected]> wrote: > Hi, > > When I try to compile this program, I get a "Use of moved variable" error. > > fn fun(b: ~[u8]) { > // ... > } > > fn main() { > let bytes: ~[u8] = ~[1,2,3]; > > loop { fun(bytes); } > } > > t.rs:8:13: 8:18 error: use of moved variable: `bytes` > t.rs:8 loop { fun(bytes); } > ^~~~~ > I can avoid the problem, by rewriting the program towards this: > > fn fun(b: ~[u8]) -> ~[u8] { b } > > fn main() { > let mut bytes: ~[u8] = ~[1,2,3]; > > loop { > bytes = fun(bytes); > } > } > > I find this somehow very unintuitive, but of course I understand that the > variable "has to move back". > Of course I can rewrite function "fun" to use &[u8] as parameter, but I want > to call TcpSocket.write, which only accepts > a ~ [u8] and I don't know how to convert a &[u8] into a ~[u8]. As & can point > to managed boxes I don't think it's possible > to convert safely. > > So is there another "nice" solution to the problem? Maybe I am missing > something... > > Best, > > Michael > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev _______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
